2014-01-17 4 views
0

Так что этот файл компилируется просто отлично. Если я решил добавить конструктор к объекту по умолчанию, я получаю ошибки компоновщика.Продолжайте получать ошибку компоновщика при добавлении конструктора в мою структуру

#ifndef VERTEX_FORMATS_H_ 
#define VERTEX_FORMATS_H_ 

#include "../utilities/float3.h" (this file does not have other includes within it) 
#include "../utilities/float2.h" (this file does not have other includes within it) 

struct VERTEX_PARTICLES 
{ 
    float3 v3fPosition;  //has a default constructor that set its own values to zero 
    float3 v3fVelocity;  //has a default constructor that set its own values to zero 
    float3 v3fAcceleration; //has a default constructor that set its own values to zero 
    float fCurLife; 
    float fEndLife; 
    float fCurScale; 
    float fStartScale; 
    float fMidScale; 
    float fEndScale; 
    unsigned int uiColor; 

    VERTEX_PARTICLES(void); 
}; 


VERTEX_PARTICLES::VERTEX_PARTICLES(void) : 
    fCurLife(0.0f), fEndLife(0.0f), 
    fCurScale(0.0f), fStartScale(0.0f), 
    fMidScale(0.0f), fEndScale(0.0f), 
    uiColor(0U) { } 

#endif 

файл компилируется нормально, если я удалю конструктор, но имеющий конструктор дает мне ошибки компоновщика:

VERTEX_PARTICLES :: VERTEX_PARTICLES (аннулируются) "(?? 0VERTEX_PARTICLES @@ QAE @ XZ) уже определены в Game.obj

у меня есть предположение, что это жалуясь, что в другом месте я добавляю этот файл несколько раз? Но я не думаю, что это будет проблема, так как я с помощью #define моего объекта , а также это не давало мне проблем без конструктора.

ответ

1

The:

#ifndef VERTEX_FORMATS_H_ 
#define VERTEX_FORMATS_H_ 

Не защищает от множества "реализаций" из конструктора VERTEX_PARTICLES::VERTEX_PARTICLES(void):

Например, если у вас есть 2 cpp-файлы, как с использованием #include "vertex_formats.h"

Оба будут содержать заголовок, и у вас будет 2 реализации конструктора, поэтому он будет скомпилирован дважды, а компоновщик найдет 2 одинаковых определения.

1

Вы не можете определить его в заголовке, если он не является встроенным. То, как вы его определили, будет получать каждый раз, когда файл будет включен.

я должен построить так:

struct VERTEX_PARTICLES 
{ 
    float3 v3fPosition;  //has a default constructor that set its own values to zero 
    float3 v3fVelocity;  //has a default constructor that set its own values to zero 
    float3 v3fAcceleration; //has a default constructor that set its own values to zero 
    float fCurLife; 
    float fEndLife; 
    float fCurScale; 
    float fStartScale; 
    float fMidScale; 
    float fEndScale; 
    unsigned int uiColor; 

    VERTEX_PARTICLES(void) : 
     fCurLife(0.0f), fEndLife(0.0f), 
     fCurScale(0.0f), fStartScale(0.0f), 
     fMidScale(0.0f), fEndScale(0.0f), 
     uiColor(0U) { } 
}; 
+0

ok wow я не могу поверить, что сделал такую ​​глупую ошибку .... я думаю, это то, что я получаю для кодирования, в то время как устал ха-ха. СПАСИБО БОЛЬШОЕ!! –

+0

Удовольствие, подумайте о принятии тогда;) –

Смежные вопросы