结构定义使我收到Multiply Defined Symbols错误

时间:2013-03-20 12:11:32

标签: c++ constructor struct linker

我有一个类'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);
}

但是,没有快乐,因为这会导致在我的代码中使用结构“点”或“实体”的任何地方未解决的外部符号错误。

有人可以在我的结构(及其相关构造函数)的声明中看到我出错的地方,以获得此错误吗?

2 个答案:

答案 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