提问人: 提问时间:11/21/2008 最后编辑:paxdiablo 更新时间:11/21/2008 访问量:2981
C++ 问题:“从 C:\C++\CRP 引用的外部错误 'C::C()'。OBJ”
C++ Problem : "Error external 'C::C()' referenced from C:\C++\CRP.OBJ"
问:
我试图得到这个:
//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 引用的未解析的外部“C::C()”。OBJ的
错误:从 C:\C++\CRP 引用的未解析的外部“C::function(int, int)”。OBJ的
我真的被困住了。帮助v.非常感谢!
编辑:
感谢您的回复,
我正在通过命令行将Borland C++ 5.5.1用于Win32,我实际上不确定链接器是什么,这是我第一次尝试这样做。
答:
您使用的是哪种编译器/开发环境?这是从命令行还是 IDE 中?
您需要确保编译 c.cpp 并告诉链接器将 c.obj 与 crp.obj 一起包含以创建可执行文件。
嗯。。。您使用哪个编译器/链接器?提供给链接器的参数? 这些文件是同一项目的一部分吗?
链接程序时,需要同时链接 c.obj 文件和 crp.obj 文件。您看到的错误是因为只有 crp.obj 文件用于链接。
您使用的是什么编译器?如果您使用的是 VisualStudio 之类的东西,那么如果 c.cpp 和 crp.cpp 在同一个项目中,它应该可以工作。如果您使用命令行进行构建,则需要链接这两个文件,例如
gcc -o crp.exe c.cpp crp.cpp
对于海湾合作委员会
看起来您的链接阶段正在尝试仅从 crp.obj 而不是 crp.obj 和 c.obj 创建可执行文件。
你是如何应对的?它应该是这样的(在Borland的情况下,如编辑中提到的):
bcc32 -ecrp.exe crp.cpp c.cpp
您也不需要 c.h 中的 include 行,唯一阻止无限包含循环的是 include 保护。
感谢您的回复,
我正在通过命令行将Borland C++ 5.5.1用于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
问题解决了,感谢所有回复的人!
评论