我有一个类'dStructs',其中我定义了几个可公开访问的结构,'实体'和'点'。这些结构在类括号dStructs中完全定义。但我不确定我是否正确定义了它们的构造函数。代码看起来像......
#pragma once
#include <GL/glut.h>
class dStructs
{
public:
struct point
{
GLfloat x, y;
point()
{
}
point(GLfloat aX,GLfloat aY) //constructor for point
{
x = aX;
y = aY;
}
};
struct entity
{
point pos, size;
entity()
{
}
entity(GLfloat posX, GLfloat posY, GLfloat sizeX, GLfloat sizeY)
{
pos = point(posX,posY);
size = point(sizeX, sizeY);
}
};
static void copyPoint(point pointToCopy, point& toPoint);
static void copyEntity(entity entityToCopy, entity& toEntity);
};
我认为将构造函数定义放在struct brakets而不是.cpp文件中我做错了。 所以我尝试将它们移出,并在.cpp中定义它们,就像这样......
#include "dStructs.h"
dStructs::point::point()
{
}
dStructs::point::point(GLfloat aX, GLfloat aY)
{
x = aX;
y = aY;
}
dStructs::entity::entity()
{
}
dStructs::entity::entity(GLfloat posX, GLfloat posY, GLfloat sizeX, GLfloat sizeY)
{
pos = point(posX,posY);
size = point(sizeX, sizeY);
}
但是,没有快乐,因为这会导致在我的代码中使用结构“点”或“实体”的任何地方未解决的外部符号错误。
有人可以在我的结构(及其相关构造函数)的声明中看到我出错的地方,以获得此错误吗?
答案 0 :(得分:1)
然而,没有快乐,因为这会导致未解决的外部符号错误 在我的代码中使用结构“点”或“实体”的任何地方。
那是因为一旦将定义移动到.cpp
文件,您实际上必须稍后链接到相应的对象。
即。如果myfile.cpp
使用dStructs
,则您必须包含头文件(就像您已经这样做)并且:
g++ -o myprog myfile.cpp dStructs.cpp
或
g++ -c myfile.cpp
g++ -c dStructs.cpp
g++ -o myprog myfile.o dStructs.o
答案 1 :(得分:0)
您会收到多个定义,因为标题和.cpp文件中都有定义
将标题中的构造函数声明更改为方法原型。
即
point() // **change this to point();**
{//remove
}//remove
point(GLfloat aX,GLfloat aY) // **change this to point(GLfloat aX,GLfloat aY);**
{//remove
x = aX;//remove
y = aY;//remove
}//remove