#include <iostream>
template<typename T> class A
{
public:
A():point_ptr(creat_point){}
~A(){delete point_ptr;}
private:
template<typename Type> struct Point;
Point<T> *point_ptr;
Point<T> * creat_point();
};
template<typename T> template<typename Type> struct A<T>::Point
{
Type x,y;
};
template<typename T> typename A<T>::template Point<T> *A<T>::creat_point()
{
return new Point<T>();
}
int main()
{
return 0;
}
在gcc中编译通过,在vs2010下编译提示:unable to match function definition to an existing declaration
请各位不理赐教,多多指教
9 个解决方案
#1
这个错误意识是: struct Point怎么办的?无法找到定义啊
#2
我明白那个错误的意思是说,定义和声明不匹配。但是这个在gcc下是可以编译成功的
#3
各家编译器肯定有自己的特点,不要强求,就好像那些一连串++i和i++的运算结果一样的,编译器不同,结果就可能不同,标准又没有规定你这个必须像GCC那样编译。
#4
谢谢你的回复,不过我觉得这个是不是编译器的问题,vs的错误信息如下
e:\mydocument\project\visualsdudio\test\test_c++\main.cpp(20): error C2244: 'A<T>::creat_point' : unable to match function definition to an existing declaration
1> e:\mydocument\project\visualsdudio\test\test_c++\main.cpp(10) : see declaration of 'A<T>::creat_point'
1> definition
1> 'A<T>::Point<T> *A<T>::creat_point(void)'
1> existing declarations
1> 'A<T>::Point<T> *A<T>::creat_point(void)'
他也指出了这个函数的定义和声明,都是一样的,却还报错。
#5
我也知道过于纠结于此,也不好,但我想知道是不是我写的代码不符合标准才导致了这个问题
#6
自己再顶一下
#7
template<typename T>
class A
{
public:
A():point_ptr(creat_point()){}
~A(){delete point_ptr;}
private:
template<typename Type>
struct Point
{
Type x, y;
};
Point<T>* point_ptr;
Point<T>* creat_point()
{
return new Point<T>();
}
};
vs2005
class A
{
public:
A():point_ptr(creat_point()){}
~A(){delete point_ptr;}
private:
template<typename Type>
struct Point
{
Type x, y;
};
Point<T>* point_ptr;
Point<T>* creat_point()
{
return new Point<T>();
}
};
vs2005
#8
给这模版语法跪了,估计是VC的bug
另外模版函数真没分开写的意义
另外模版函数真没分开写的意义
#9
试过各家编译器,g++ clang++ icl都是编译过的
#1
这个错误意识是: struct Point怎么办的?无法找到定义啊
#2
我明白那个错误的意思是说,定义和声明不匹配。但是这个在gcc下是可以编译成功的
#3
各家编译器肯定有自己的特点,不要强求,就好像那些一连串++i和i++的运算结果一样的,编译器不同,结果就可能不同,标准又没有规定你这个必须像GCC那样编译。
#4
谢谢你的回复,不过我觉得这个是不是编译器的问题,vs的错误信息如下
e:\mydocument\project\visualsdudio\test\test_c++\main.cpp(20): error C2244: 'A<T>::creat_point' : unable to match function definition to an existing declaration
1> e:\mydocument\project\visualsdudio\test\test_c++\main.cpp(10) : see declaration of 'A<T>::creat_point'
1> definition
1> 'A<T>::Point<T> *A<T>::creat_point(void)'
1> existing declarations
1> 'A<T>::Point<T> *A<T>::creat_point(void)'
他也指出了这个函数的定义和声明,都是一样的,却还报错。
#5
我也知道过于纠结于此,也不好,但我想知道是不是我写的代码不符合标准才导致了这个问题
#6
自己再顶一下
#7
template<typename T>
class A
{
public:
A():point_ptr(creat_point()){}
~A(){delete point_ptr;}
private:
template<typename Type>
struct Point
{
Type x, y;
};
Point<T>* point_ptr;
Point<T>* creat_point()
{
return new Point<T>();
}
};
vs2005
class A
{
public:
A():point_ptr(creat_point()){}
~A(){delete point_ptr;}
private:
template<typename Type>
struct Point
{
Type x, y;
};
Point<T>* point_ptr;
Point<T>* creat_point()
{
return new Point<T>();
}
};
vs2005
#8
给这模版语法跪了,估计是VC的bug
另外模版函数真没分开写的意义
另外模版函数真没分开写的意义
#9
试过各家编译器,g++ clang++ icl都是编译过的