簡體   English   中英

“未解析的外部符號”從一個類引用另一個類

[英]“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>智能指針。

您沒有實現FooBar成員函數,而是實現了獨立測試功能。 要在類外部實現成員函數,您需要為類名稱提供范圍解析。

更新:

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM