C++中的前向声明错误

Forward declaration error in C++

我在一个 hpp 文件中定义了一个 class,我试图在另一个 header 中使用它,所以我对它做了一个前向声明(我只想通过引用使用它作为函数参数)。出于某种原因,我不断收到编译错误。我不知道为什么它不起作用。这是我的代码:

//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"));
    ...
}

我从 main() 中得到一个错误,它说:

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

如果我没理解错,这意味着编译器没有找到 MyClass 的定义,只有它的预声明(即使我在 something.cpp 中包含了 MyClass.hpp),这就是为什么它说它不完整。我在这里错过了什么?

函数

void someFunction (MyClass& mc);

正在接受对 MyClass 实例的非常量引用。

不允许将临时函数传递给此类函数。

代码应该是

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

或者您需要接受一个 const 引用。

void someFunction (const MyClass& mc);

我认为问题与前向声明无关,而是您不能将临时变量传递给以引用作为参数的函数。事实上,如果您将所有定义放在一个文件中,它仍然无法编译。另一方面,如果将 main 的代码替换为以下代码,它将编译:

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