我正在运行一个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 *)'
的多重定义任何想法?
答案 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文件)。或者,您可以在类块中定义它,而不是在外部进行定义。