V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Reimu
V2EX  ›  C

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

  •  
  •   Reimu · 2015-06-01 23:46:19 +08:00 · 999 次点击
    这是一个创建于 3257 天前的主题,其中的信息可能已经有所发展或是发生改变。

    //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

    不知道错在哪

    9 条回复    2015-06-02 19:21:14 +08:00
    choury
        1
    choury  
       2015-06-01 23:49:58 +08:00
    你应该吧GetSalary定义成Emplyee的一个虚函数,纯的也行
    Reimu
        2
    Reimu  
    OP
       2015-06-01 23:56:56 +08:00
    @choury 定义了
    choury
        3
    choury  
       2015-06-02 00:03:43 +08:00   ❤️ 1
    @Reimu 你只声明了,在哪定义了?

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

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

    以及
    member = member + 1;
    这一行要移到他下面那个if语句之后
    cmheia
        5
    cmheia  
       2015-06-02 11:14:39 +08:00
    只有我觉得 pragma once 前面没有 # 很奇怪吗?
    matthewgao
        6
    matthewgao  
       2015-06-02 13:11:24 +08:00
    定义是一方面,另外强烈不建议用数组存储的指针用来进行多态操作,有潜在的问题会导致错误。可以用考虑用vector
    proudzhu
        7
    proudzhu  
       2015-06-02 13:18:33 +08:00
    @cmheia 被当成 Markdown 解析了
    Reimu
        8
    Reimu  
    OP
       2015-06-02 19:21:02 +08:00
    @choury 。。。。刚发现定义的那个被删了,十分感谢
    Reimu
        9
    Reimu  
    OP
       2015-06-02 19:21:14 +08:00
    @sketch33 谢谢
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   2382 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 13:06 · PVG 21:06 · LAX 06:06 · JFK 09:06
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.