2015-04-03 86 views
1

我在hpp文件中定義了一個類,我試圖在另一個頭中使用它,所以我向它做了一個前向聲明(我只想通過引用將它用作函數參數) 。出於某種原因,我不斷收到編譯錯誤,因爲它。我無法弄清楚它爲什麼不起作用。這裏是我的代碼:C++中的前向聲明錯誤

//something.hpp: 
class MyClass; 
void someFunction (MyClass& mc); 
... 

//something.cpp: 
#include "MyClass.hpp" 
void someFunction (MyClass& mc) {...} 
... 

//MyClass.hpp: 
class MyClass { 
    const char* myText; 
public: 
    MyClass (const char* text) : myText(text) {} 
}; 

//main.cpp: 
int main() { 
    ... 
    someFunction (MyClass ("some text here")); 
    ... 
} 

我從主(),它說,得到一個錯誤:

'<function-style-cast>' : cannot convert from 'const char [15]' to 'MyClass' 
Source or target has incomplete type 

如果我的理解是正確的,這意味着編譯器未找到MyClass的定義,只有它的預先聲明(即使我將MyClass.hpp包含在something.cpp中),這就是爲什麼它說它不完整。我在這裏錯過了什麼?

+2

您需要在main.cpp中包含MyClass.hpp。 – juanchopanza 2015-04-03 08:21:26

回答

3

功能

void someFunction (MyClass& mc); 

接受一個非const參照MyClass實例。

您不允許通過臨時功能。

的代碼應該是

#include "MyClass.hpp" 
... 
int main() { 
    MyClass m("some text here"); 
    someFunction(m); 
} 

或者您需要接受const引用。

void someFunction (const MyClass& mc); 
2

我不認爲這個問題是關係到向前聲明,而是你不能將臨時採取的引用作爲參數的函數。事實上,如果你把所有的定義放在一個文件中,它仍然不能編譯。另一方面,如果用下面的代碼替換main的代碼,它會編譯:

int main() { 
    MyClass mc("Some text here"); 
    someFunction(mc); 
}