Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/155.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 未初始化的局部变量';a';VS2012在模板类的对象上使用_C++_Visual Studio 2012 - Fatal编程技术网

C++ 未初始化的局部变量';a';VS2012在模板类的对象上使用

C++ 未初始化的局部变量';a';VS2012在模板类的对象上使用,c++,visual-studio-2012,C++,Visual Studio 2012,在VS2012中,下面的代码没有编译,它说 错误C4700:在ab(a)行上使用了未初始化的局部变量“a” 我在gcc4.4.7中测试过,没问题 我原以为编译器无法生成默认构造函数,但这似乎只是VS2012的一个问题。为什么它会给出这个错误,解释编译器是如何处理代码的 template<typename T> class A { public: T* p; }; int main() { A<int> a; A<int> b(a);

在VS2012中,下面的代码没有编译,它说
错误C4700:在
ab(a)行上使用了未初始化的局部变量“a”
我在gcc4.4.7中测试过,没问题

我原以为编译器无法生成默认构造函数,但这似乎只是VS2012的一个问题。为什么它会给出这个错误,解释编译器是如何处理代码的

template<typename T>
class A
{
public:
    T* p;
};

int main()
{
    A<int> a;
    A<int> b(a);
}
模板
甲级
{
公众:
T*p;
};
int main()
{
A A;
A b(A);
}
我在gcc4.4.7中测试过,没问题

在什么意义上你认为它是好的?您从未设置a.p值以便代码可以编译,但即使使用gcc,它仍然是垃圾数据


默认情况下,它是一个警告,而不是一个错误,因此您可以使用gcc可能编译它的相同方式来编译它。您只需将
/WX
设置为将警告视为错误,这是一种良好的做法。

a.p
未初始化。原始指针的默认构造函数是不初始化它。