[英]“unresolved external symbol” referencing one class from another
我正在嘗試做一些我認為應該很容易的事情(作為C ++ noob):從另一個引用一個類。 由於某種原因,我遇到了一個錯誤:
錯誤6錯誤LNK2019:未解析的外部符號“ public:float * __thiscall Foo :: Test(void)”(?Test @ Foo @@ QAEPAMXZ)在函數“ void __cdecl Test(void)”(?Test @@ YAXXZ)中引用.obj
oo
class Foo
{
public:
Foo(void);
~Foo(void);
float* Test();
};
Foo.cpp
#include "Foo.h"
float* Test()
{
return new float[0];
}
Bar.h
class Bar
{
public:
Bar(void);
~Bar(void);
void Test();
};
Bar.cpp
#include "Bar.h"
#include "Foo.h"
void Test()
{
Foo* foo = new Foo();
foo->Test();
}
為什么編譯器不讓我引用Bar的 Foo類? 我不知道這個錯誤是什么意思,也不清楚如何調試它。
#include "Foo.h"
float* Test()
{
return new float[0];
}
應該:
#include "Foo.h"
float* Foo::Test()
{
return new float[0];
}
您的版本僅定義了一個自由函數Test
,與成員函數Foo::Test
。
Unresolved external symbol
錯誤表示編譯器告訴您, 嘿,您告訴我,我會找到此東西的定義,但我看了一下,卻找不到 。 從本質上講,您對它撒了謊,它把您叫了出來。
另一個垃圾是調用約定( __cdecl
, __thiscall
)和錯誤的(實際)函數名稱( ?Test@@YAXXZ
)。
您需要實現Foo::Foo()
, Foo::~Foo()
並類似地實現Bar
。 此外, float* Test()
應為
float* Foo::Test() { ... }
但是,您實際上應該避免將指向動態分配對象的指針返回給調用方。 例如,使用std::vector<float>
智能指針。
您沒有實現Foo
和Bar
成員函數,而是實現了獨立測試功能。 要在類外部實現成員函數,您需要為類名稱提供范圍解析。
更新:
Foo.cpp
float* Test()
{
return new float[0];
}
至
float* Foo::Test()
{
return new float[0];
}
Bar.cpp
void Test()
{
Foo* foo = new Foo();
foo->Test();
}
至:
void Bar::Test()
{
Foo* foo = new Foo();
foo->Test();
}
您還需要實現~Foo(void)
, ~Bar(void)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.