我試圖在學習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