Visual Studio不接受类实现[C ++]

时间:2017-02-09 14:46:54

标签: c++ class visual-studio-2015

我正在尝试在学习C ++时从Dev C ++迁移到Visual Studio(因为我将不得不使用后者)但是出于某种原因,在Dev C ++中完美运行的相当简单的类实现会创建一个长列表Visual Studio中的错误。

文件很简单:

  • 头文件,用于构造函数,变量等的声明
  • cpp文件,用于实现所述构造函数,函数等
  • consoleapplication文件(在visual studio上),生成“main()”函数。

stock2.h

#ifndef STOCK2_H_
#define STOCK2_H_
class Stock
{
public:
    Stock();
    Stock(const char* co, int n = 0, double pr = 0.0);
    ~Stock();
    void show()const;
private:
    std::string company;
    int shares;
    double share_val;
    double total_val;
};
#endif

stock2.cpp

#include "stdafx.h"
#include <iostream>
#include <string>
#include "stock2.h"

Stock::Stock()  //default constructor
{
    //code
}

Stock::Stock(const char* co, int n, double pr)
{
    //code
}

Stock::~Stock()
{
    std::cout << "Stock object has been destroyed" << std::endl;
}

//Methods

void Stock::show() const
{
    //code
}

ConsoleApplication.cpp

#include "stdafx.h"
#include "stock2.cpp"
int main()
{
    using std::cout;
    const int STKS = 4;
    Stock stocks[STKS] = {
        Stock("NanoSmart", 12, 20.1),
        Stock("Boffo Objects", 200, 2.0),
        Stock(),
        Stock("Monolithic Obelisks", 130, 3.25)
    };
    cout << "Stock Holdings: \n";
    for (int st = 0; st<STKS; st++)
        stocks[st].show();
    return 0;
}

我试图在这里发布的其他问题上找到解决方案,但我真的无法弄清楚这里有什么问题。 我还读到一个不应该#include一个cpp文件,因为标题应该是main()和cpp文件本身之间的链接,但如果我决定在consoleapplication中使用#include stock2.H而不是.CPP,然后编译器再也找不到方法实现了。

编辑:在匆忙中我忘了发布错误! 他们都是这种形式:

错误LNK2005 “public:void __thiscall Stock :: update(double)”(?update @ Stock @@ QAEXN @ Z)已定义于 ConsoleApplication1.obj ConsoleApplication1 //path\ConsoleApplication1\ConsoleApplication1\stock2.obj

EDIT2:由于你们很多人都在问我“解决方案资源管理器”,我最好添加一个截图来向你展示它是如何制作的 enter image description here

1 个答案:

答案 0 :(得分:1)

您在stock2.cpp中添加了ConsoleApplication.cpp。这意味着stock2.cpp中的所有代码现在都被编译两次,链接器显示错误消息

Error LNK2005 "public: void __thiscall Stock::<...> already defined 

用于现在重复的功能。只需更换

#include "stock2.cpp"

#include "stock2.h"

如果您在执行此操作时出现其他错误,请为此发布错误消息。