0

我在 C++ .h 类文件中有一个 ABC 类。

.h 文件

#ifndef ABC_H_
#define ABC_H_

class ABC
{
  public:
    int x;
    int y;
};
#endif

.cpp 文件

//----- Empty  -----------

主程序.cpp

#include <iostream>
#include "ABC.h"
using namespace std;
    int main() {
      ABC a1;
      a1.x=5; a1.y=2;
      cout<<a1.x;
      // ...
    }

在 Eclipse 中编译时出错:

symbols not found for architecture x86_64

ld: symbol(s) not found for architecture x86_64
collect2: ld returned 1 exit status
make: *** [CPPProgram] Error 1

所有其他 hello world 程序等都可以正常编译和运行。我记得当我在使用模板时在单独的文件中进行定义和实现时遇到了这个错误(当我在同一个文件中实现定义和实现时它就消失了)

我不确定这里有什么问题。有什么建议么?

4

2 回答 2

4

在您发布的代码中,您缺少一个分号:

class ABC
{
public:
int x;
int y;
};
 ^
于 2012-06-07T15:09:33.360 回答
0

您应该确保在文件中包含正确的头.cpp文件。您的包含路径中可能还有另一个ABC.h文件。您可能还会查看文件在文件系统上的命名是否正确(例如abc.hvs. ABC.H)。您可以测试是否包含头文件,将您的类型名称修改为唯一的名称,并查看编译行为是否发生变化。

有人向我指出,编译器应该在其头文件包含保护中使用不会与普通源文件冲突的约定。确保没有任何头文件定义使用双下划线 ( __) 或以下划线开头后跟大写字母的名称。

在您的评论中,您列出了有关在一行代码上停止编译的更多信息(您没有给出编译停止原因的编译错误),并且您添加了有关链接失败的信息。编译器不应该留下会导致链接器失败的部分创建的目标文件。也许链接器正在寻找一个较旧的目标文件或某种类型的源文件名冲突(例如,test.c并且test.cc都希望保留一个test.o通常命名的目标文件)。指示您的编译系统删除所有目标文件(无论是什么等价文件make clean),然后查看问题是否仍然存在。如果是这样,请检查文件名冲突。

于 2012-06-07T15:14:02.623 回答