编译C ++类时出现问题

时间:2010-01-24 07:47:19

标签: c++

我正在运行一个C ++程序,该程序使用另一个.cpp文件中的类。该类只有一个构造函数。它在我单独测试时有效。主程序编译,但是当我运行它时,我在构造函数中有一个错误。任何人都可以想到可能发生的任何情况?谢谢。

我想我只是在终端中运行代码,这很好。但是当我尝试在eclipse中构建项目时,它显示以下代码有多个定义错误:

class model
{
  public:
    int textures [];
    float vertices[][3];
    float triangles[][13];
  public:
    model(const char*); // constructor
};

model::model(const char* filename)
{

错误信息是:`model :: model(char const *)'

的多重定义

任何想法?

3 个答案:

答案 0 :(得分:2)

无论如何,我会随意猜测(考虑到你发布的内容,没什么可去的)。我猜你已经溢出了你的三角形数组(也许计数器太大了)而且你正在捣毁你的堆或堆栈。

还有一件事。这一行:

if (str[0] != '#' and !str.empty())

有缺陷。如果str为空,则不希望读取str [0]。您需要切换订单:

if (!str.empty() and str[0] != '#')

答案 1 :(得分:2)

您需要将代码拆分为.h(标题)和a.cpp(实现)文件并放入:

model::model(const char* filename)
{

在后者。或者,重写您的类,以便构造函数(以及任何其他成员函数)的定义位于头文件的类中:

class model {
   ...
   model(const char*) {
     // constructor body here
   }
};

答案 2 :(得分:0)

发生错误是因为每次在某处包含标题时,您都会获得该函数的新定义。如果它在程序中的多个位置使用,则会出现错误。

您可能希望在单独的实现文件中定义构造函数(类转到标题,以便其他人可以使用它,函数实现转到.cpp / cc文件)。或者,您可以在类块中定义它,而不是在外部进行定义。