0

我不断收到以下信息:

[链接器错误] 对 `ComponentClass::POSIZIONENULLA' ld 的未定义引用返回 1 退出状态 [构建错误] [main.exe] 错误 1

有人可以帮我解决这个问题。这是我的代码:

组件类.h

#ifndef _ComponentClass_H
#define _ComponentClass_H

template< class T>
class ComponentClass
{
        public:

               typedef ComponentClass* posizione;
               static const posizione POSIZIONENULLA;
               ComponentClass();
};

template< class T>
ComponentClass<T>::ComponentClass()
{
const posizione POSIZIONENULLA=(ComponentClass*)-1;
}
#endif

项目类.h

#ifndef _ProjectClass_H
#define _ProjectClass_H

#include "ComponentClass.h"

template<class T>
class ProjectClass
{
  public:
        typedef typename ComponentClass<T>::posizione posizione;



         ProjectClass();
         posizione dummyFunction();

         private:
          posizione dummyposition;

};

          template<class T>
          ProjectClass<T>::ProjectClass()
          {

           dummyposition=   (posizione)ComponentClass<T>::POSIZIONENULLA;                  
          }

          template<class T>
          typename ProjectClass<T>::posizione ProjectClass<T>::dummyFunction()
          {
           posizione tempPosition;
           tempPosition=(posizione)ComponentClass<T>::POSIZIONENULLA;
           return tempPosition;
          } 
#endif

主文件

#include <cstdlib>
#include <iostream>
#include <string>

#include "ProjectClass.h"

using std::cout;
using std::endl;
using std::string;

int main(int argc, char *argv[])
{  
ProjectClass<int> pc;
}
4

1 回答 1

2

这段代码实际上并没有做任何有用的事情:

template< class T>
ComponentClass<T>::ComponentClass()
{
    const posizione POSIZIONENULLA=(ComponentClass*)-1;
}

它只是在构造函数中声明一个局部变量,初始化它然后不使用它。它对你的static const posizione POSIZIONENULLA.

我想你的意思是:

template< class T>
const typename ComponentClass<T>::posizione ComponentClass<T>::POSIZIONENULLA=(ComponentClass*)-1;

那应该可以解决您的链接错误。附带说明一下-1,正如其他人在上面的评论中指出的那样,将其用作“特殊”指针值并不是一个好主意

于 2012-12-05T02:22:11.657 回答