我正试图解决这个问题:
//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,通过命令行,我实际上不确定链接器是什么,这是我第一次尝试这样做。
答案 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
问题解决了,感谢所有回复的人!