簡體   English   中英

與g ++未定義參考鏈接

[英]Linking with g++ undefined reference

我編寫了以下代碼:

//--a.cpp--//
#include <stdio.h>

class A
{
public:
    void bar();
    virtual void foo()=0;
};

class B: public A
{
public:
    void foo()
    {
        A::bar();
    }
}
int main()
{
    B *b= new B();
    b->foo();
    return 0;
}

//--b.cpp--//
#include <stdio.h>
class A
{
public:
    void bar()
    {
        printf("class A");
    }
}

現在,我按照以下步驟進行comipilng和鏈接該模塊:

g++ -c a.cpp
g++ -c b.cpp
g++ -o bin a.o b.o

但是鏈接器會引發undefined reference error 我不明白,為什么?

您尚未在a.cpp定義A::bar() B::foo() ,該方法被調用,但是它沒有實現。 因此,鏈接器無法鏈接它。

b.cpp您創建了另一個類名A ,但它與第一​​個類名無關。 它不會在此處造成任何問題,但是如果將任何一個文件包含到另一個文件中,或者將兩個文件都包含在第三個文件中,則將出現“ 重新定義錯誤” (盡管很少包含.cpp )。 一個翻譯單位中只能有一個名稱的定義。

通常的做法是在頭文件(.hXX)中聲明類,並在源文件(.cXX)中實現方法。 如果您希望方法是inline d,則可以在header中定義或將方法顯式聲明為inline 參見ODR 翻譯部

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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