繁体   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