我已經看過其他幾個問題,但我的情況似乎比我經歷過的情況簡單很多,所以我會問我的情況。Visual C++:沒有默認的構造函數
Learn.h:
#ifndef LEARN_H
#define LEARN_H
class Learn
{
public:
Learn(int x);
~Learn();
private:
const int favourite;
};
#endif
Learn.cpp:
#include "Learn.h"
#include <iostream>
using namespace std;
Learn::Learn(int x=0): favourite(x)
{
cout << "Constructor" << endl;
}
Learn::~Learn()
{
cout << "Destructor" << endl;
}
Source.cpp:
#include <iostream>
#include "Learn.h"
using namespace std;
int main() {
cout << "What's your favourite integer? ";
int x; cin >> x;
Learn(0);
system("PAUSE");
}
本身上面的代碼不輸出任何誤差。
但是,在將Learn(0)
替換爲Learn(x)
後,我確實遇到了一些錯誤。它們是:
- 錯誤E0291:
no default constructor exists for class Learn
- Error C2371:
'x' : redefinition; different basic types
- Error C2512:
'Learn' : no appropriate default constructor available
的任何原因?我真的想要輸入整數變量x
而不是0
。我知道這只是練習,我是新手,但真的,我有點困惑,爲什麼這不起作用。
任何幫助,將不勝感激,謝謝。
您試圖在.cpp中指定x的默認值(在Learn ctor中)。你應該在頭文件中定義它。 – ZeroUltimax
@ZeroUltimax對於默認參數是正確的,但編譯器抱怨的真正原因是它認爲你正在試圖定義一個名爲'Learn'的函數。你不能像你想要的那樣調用構造函數。你需要使用'Learn some_name(x);'。 – Jonesinator
[OT]:'Learn :: Learn(int x = 0)'在你的cpp中沒用,因爲默認值只在該cpp文件中可用。刪除它,或將其放置在標題中。 – Jarod42