我试图在学习C++的时候从Dev C++转移到Visual Studio(因为我将不得不使用后者),但由于某种原因,一个相当简单的类在Dev C++中完美工作的实现会在Visual Studio中创建一长串错误。Visual Studio不接受类实现[C++]
的文件是简单的:
- 头文件,对构造的声明,变量等
- CPP文件,以实现所述的构造,功能等
- consoleapplication文件(视觉工作室)生成“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文件本身之间的链接,但是如果我决定在控制台应用程序中使用#include stock2.H而不是.CPP ,那么编译器不能再找到方法实现。
编辑:在赶时间我忘了发布错误! 他们都以这种形式:
错误LNK2005 “市民:无效__thiscall股票::更新(双)”(?更新@股票@@ QAEXN @ Z)在 ConsoleApplication1.obj ConsoleApplication1已经定义//路径\ ConsoleApplication1 \ ConsoleApplication1 \ stock2.obj
EDIT2:既然很多人都问我关于“解决方案资源管理器”,我最好只需添加一个屏幕截图向你展示它是如何取得现在
你会得到什么错误?如果编译器(实际上是链接器)在包含头文件(这是正确的方法)时找不到方法实现,那么您已经错误地设置了项目 – UnholySheep
正如您所知,只包含头文件。如果您的实施文件包含在您的项目文件中,则应自动编译和链接。在Visual Studio中,确保所有源文件都列在解决方案资源管理器视图中。如果文件丢失,您可以将文件拖放到此视图中以将其添加到项目中。 –
我刚刚添加了我得到的错误(我完全忘了添加这些!)。无论如何,我使用Visual Studio项目的标准设置,所以我有两个主文件夹下的项目文件夹:源文件(所有的.cpp文件)和头文件(我存储stock2.h) – kn0bbulo