1

我试图得到这个:

//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)'

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

编辑:

谢谢您的回复,

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

4

5 回答 5

3

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

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

bcc32 -ecrp.exe crp.cpp c.cpp

您也不需要 ch 中的包含行,唯一停止无限包含循环的是包含保护。

于 2008-11-21T00:14:38.387 回答
1

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

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

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

为 gcc

于 2008-11-21T00:14:26.607 回答
0

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

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

于 2008-11-21T00:12:57.390 回答
0

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

于 2008-11-21T00:13:49.840 回答
0

谢谢您的回复,

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

编辑:

** 这是我之前在 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

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

于 2008-11-21T00:17:21.783 回答