0

我有一个类“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 brats 中而不是在 .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);
}

但是,这并不令人高兴,因为在我的代码中使用结构“point”或“entity”的任何地方都会导致未解决的外部符号错误。

任何人都可以在我的结构(及其相关构造函数)的声明中看到我在哪里出错以得到这个错误吗?

4

2 回答 2

1

但是,这并不令人高兴,因为在我的代码中使用结构“point”或“entity”的任何地方都会导致未解决的外部符号错误。

这是因为一旦将定义移动到.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
于 2013-03-20T12:15:02.963 回答
0

您收到多个定义,因为您在标头和 .cpp 文件中有一个定义

将标题中的构造函数声明更改为仅方法原型。

IE

    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
于 2013-03-20T12:28:54.463 回答