Продолжайте получать ошибку компоновщика при добавлении конструктора в мою структуру

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

#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 (void) "(?? 0VERTEX_PARTICLES @@QAE @XZ), уже определенный в Game.obj

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

2 ответа

:

#ifndef VERTEX_FORMATS_H_
#define VERTEX_FORMATS_H_

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

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

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


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

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

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 ) { }
};

licensed under cc by-sa 3.0 with attribution.