C ++问题:“从C:\ C ++ \ CRP.OBJ引用的错误外部'C :: C()'”

时间:2008-11-21 00:06:47

标签: c++ linker unresolved-external

我正试图解决这个问题:

//C.h
#ifndef C_H
#define C_H
#include "c.h"

class C
{
    public:
        C();
        int function(int, int);
};
#endif

在此定义:

//c.cpp
#include "c.h"
C::C()
{
}
int C::function(int a, int b)
{
    return a * b;
}

在此工作:

//crp.cpp
#include <iostream>
#include "c.h"

void main(void)
{
    C a;
    std::cout << a.function(1, 2);
}

但我得到两个错误

错误:从C:\ C ++ \ CRP.OBJ引用的未解析的外部'C :: C()'

错误:从C:\ C ++ \ CRP.OBJ引用的未解析的外部'C :: function(int,int)'

我真的被困住了。帮助v。非常感谢!

编辑:

感谢您的回复,

我正在使用Borland C ++ 5.5.1 for Win32,通过命令行,我实际上不确定链接器是什么,这是我第一次尝试这样做。

5 个答案:

答案 0 :(得分:3)

看起来您的链接阶段正在尝试从crp.obj, NOT crp.obj和c.obj创建可执行文件。

你是如何编写的?它应该是类似的(在Borland的情况下,如编辑中所述):

bcc32 -ecrp.exe crp.cpp c.cpp

你也不需要c.h中的include行,唯一能阻止无限include循环的是include guard。

答案 1 :(得分:1)

链接程序时,需要链接c.obj文件和crp.obj文件。您看到的错误是因为只有crp.obj文件用于链接。

您使用的是什么编译器?如果您正在使用像VisualStudio这样的东西,那么如果c.cpp和crp.cpp都在同一个项目中,它应该可以工作。如果您使用命令行进行构建,则需要链接这两个文件,例如

gcc -o crp.exe c.cpp crp.cpp

for gcc

答案 2 :(得分:0)

您使用的是哪种编译器/开发环境?这是来自命令行还是IDE?

您需要确保编译c.cpp并告诉链接器将c.obj与crp.obj一起包含以创建可执行文件。

答案 3 :(得分:0)

嗯......你使用哪个编译器/链接器?提供给链接器的参数? 这些文件是同一个项目的一部分吗?

答案 4 :(得分:0)

感谢您的回复,

我正在使用Borland C ++ 5.5.1 for Win32,通过命令行,我实际上不确定链接器是什么,这是我第一次尝试这样做。

编辑:

**这就是我之前在Windows命令提示符中尝试的内容:

C:\c++>bcc32 crp

**这就是结果:

Borland C++ 5.5.1 for Win32 Copyright (c) 1993, 2000 Borland

crp.cpp:

Turbo Incremental Link 5.00 Copyright (c) 1997, 2000 Borland

Error: Unresolved external 'C::C()' referenced from C:\C++\CRP.OBJ

Error: Unresolved external 'C::function(int, int)' referenced from C:\C++\CRP.OBJ

**然后我尝试了这个:

bcc32 -ecrp.exe crp.cpp c.cpp

**作为Pax Diablo建议,得到了这个:

C:\c++>bcc32 -ecrp.exe crp.cpp c.cpp

Borland C++ 5.5.1 for Win32 Copyright (c) 1993, 2000 Borland

crp.cpp:

c.cpp:

Turbo Incremental Link 5.00 Copyright (c) 1997, 2000 Borland

**但是在尝试再次编译crp.cpp时,我得到了和以前一样的错误:

C:\c++>bcc32 crp

Borland C++ 5.5.1 for Win32 Copyright (c) 1993, 2000 Borland

crp.cpp:

Turbo Incremental Link 5.00 Copyright (c) 1997, 2000 Borland

Error: Unresolved external 'C::C()' referenced from C:\C++\CRP.OBJ

Error: Unresolved external 'C::function(int, int)' referenced from C:\C++\CRP.OBJ

编辑: 哎呀!试图以错误的方式再次编译它对我来说非常愚蠢。它虽然现在有效。因此,正如Pax Diablo建议的那样,解决方案是编译crp.cpp,如下所示:

    bcc32 -ecrp.exe crp.cpp c.cpp

问题解决了,感谢所有回复的人!