求大神帮我看一下这段代码

2015-06-01 23:46:19 +08:00
 Reimu

//salary.h头文件

pragma once

include "stdafx.h"

include <string>

include <iostream>

using namespace std;

class Emplyee
{
public:
Emplyee(string strName, int nYears)
:m_strName(strName), m_nYears(nYears)
{}

virtual int GetSalary(void);

string Getname()
{
    return m_strName;
}

protected:
string m_strName;

int m_nYears;

};

class Manager :public Emplyee
{
public:
Manager(string strName, int nYears)
:Emplyee(strName, nYears)
{}
virtual int GetSalary(void)
{
return 5000 * m_nYears + 10000;
}
};

class Woker : public Emplyee
{
public:
Woker(string strName, int nYears)
:Emplyee(strName, nYears)
{}
virtual int GetSalary(void)
{
return 10 * m_nYears;
}
};

const int max_const = 1000;

class salarysystem
{
public:
salarysystem();
~salarysystem();
void InputEmplyee();
void Displaysalary();

private:
int m_ncount;
Emplyee *m_arrEmplyee[max_const];
};

// salarysystem.cpp : 定义控制台应用程序的入口点。
//

include "stdafx.h"

include <iostream>

include <string>

include "salary.h"

using namespace std;

salarysystem::salarysystem()
{
m_ncount = 0;
}
salarysystem::~salarysystem()
{
for (int i=0; i <= m_ncount; i++)
{
Emplyee* n;
n = m_arrEmplyee[i];
delete n;

}

}
void salarysystem::InputEmplyee()
{
string name;
int year;
bool a;
int member=0;
while (member<max_const)
{

cout << "姓名:";
    cin >> name;
    if (name == "end")
    {
        break;
    }
    cout << "年:";
    cin >> year;
    cout << "是否为经历(0为不是)";
    cin >> a;
    member = member + 1;
    if (a)
    {
        m_arrEmplyee[member] = new Manager(name, year);
    }
    else
    {
        m_arrEmplyee[member] = new Woker(name, year);
    }

}

}
void salarysystem::Displaysalary()
{
string n;
int m;
for (int i = 0; i < max_const; i++)
{
m=m_arrEmplyee[i]->GetSalary();
n = m_arrEmplyee[i]->Getname();
cout << m << endl << n << endl;
}
}
int _tmain(int argc, _TCHAR* argv[])
{
salarysystem a;
a.InputEmplyee();
a.Displaysalary();
}

错误 1 error LNK2001: 无法解析的外部符号 "public: virtual int __thiscall Emplyee::GetSalary(void)" (?GetSalary@Emplyee@@UAEHXZ) C:\Users\Ghast\Documents\Visual Studio 2013\Projects\工资系统\salarysystem\salarysystem\salarysystem.obj salarysystem
错误 2 error LNK1120: 1 个无法解析的外部命令 C:\Users\Ghast\Documents\Visual Studio 2013\Projects\工资系统\salarysystem\Debug\salarysystem.exe 1 1 salarysystem

不知道错在哪

1014 次点击
所在节点    C
9 条回复
choury
2015-06-01 23:49:58 +08:00
你应该吧GetSalary定义成Emplyee的一个虚函数,纯的也行
Reimu
2015-06-01 23:56:56 +08:00
@choury 定义了
choury
2015-06-02 00:03:43 +08:00
@Reimu 你只声明了,在哪定义了?

要么你写成virtual int GetSalary(void)=0;
要么你就写
virtual int GetSalary(void){}
sketch33
2015-06-02 00:09:46 +08:00
无责任瞎答

virtual int GetSalary(void);
改为
virtual int GetSalary(void) = 0;

以及
member = member + 1;
这一行要移到他下面那个if语句之后
cmheia
2015-06-02 11:14:39 +08:00
只有我觉得 pragma once 前面没有 # 很奇怪吗?
matthewgao
2015-06-02 13:11:24 +08:00
定义是一方面,另外强烈不建议用数组存储的指针用来进行多态操作,有潜在的问题会导致错误。可以用考虑用vector
proudzhu
2015-06-02 13:18:33 +08:00
@cmheia 被当成 Markdown 解析了
Reimu
2015-06-02 19:21:02 +08:00
@choury 。。。。刚发现定义的那个被删了,十分感谢
Reimu
2015-06-02 19:21:14 +08:00
@sketch33 谢谢

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/195413

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX