C++ 为什么在GCC4.4.1中我不能在函数模板中声明默认参数? 在这里: 他们说fnc中的dflt tmp参数由他们的4.4版本支持。我运行了4.4.1版,当我试图编译时:
猜猜这个d是干什么用的?;)C++ 为什么在GCC4.4.1中我不能在函数模板中声明默认参数? 在这里: 他们说fnc中的dflt tmp参数由他们的4.4版本支持。我运行了4.4.1版,当我试图编译时:,c++,gcc,C++,Gcc,猜猜这个d是干什么用的?;) #包括 模板 CollT*delete_(键kValue) { 返回新的CollT; } int main() { 返回0; } 我有个错误。 那么发生了什么呢?std::vector不是一个类,而是一个模板。您可以输入语法,将模板指示为模板参数。在您的例子中,您可能只想使它成为一个类,而不是一个模板。您可以输入语法,将模板指示为模板参数。在您的情况下,您可能只想使其成为std::vector我认为您显示的代码已损坏: 这是修复程序和如何构建,它在g++4.4.5
#包括
模板
CollT*delete_(键kValue)
{
返回新的CollT;
}
int main()
{
返回0;
}
我有个错误。
那么发生了什么呢?std::vector不是一个类,而是一个模板。您可以输入语法,将模板指示为模板参数。在您的例子中,您可能只想使它成为一个类,而不是一个模板。您可以输入语法,将模板指示为模板参数。在您的情况下,您可能只想使其成为
std::vector
我认为您显示的代码已损坏:
这是修复程序和如何构建,它在g++4.4.5上工作,因此请仔细检查您的版本:
#include<vector>
template <class Key, class CollT = std::vector<Key> >
CollT* delete_(Key kValue)
{
return new CollT;
}
int main()
{
return 0;
}
#包括
模板
CollT*delete_(键kValue)
{
返回新的CollT;
}
int main()
{
返回0;
}
建立:
g++模板def.cpp-std=c++0x
根据评论进行编辑:
1) replace typename with class within template definition (both class CollT and typename CollT seems fine)
2) replaced `vector<int>` with `vector<Key>`
3) compiling without flag, will give you the following error: default template arguments may not be used in function templates without -std=c++0x or -std=gnu++0x
1)用模板定义中的类替换typename(类CollT和typename CollT似乎都可以)
2) 将“vector”替换为“vector”`
3) 在没有标志的情况下编译会出现以下错误:在没有-std=c++0x或-std=gnu++0x的函数模板中不能使用默认模板参数
我认为您显示的代码已被破坏:
这是修复程序和如何构建,它在g++4.4.5上工作,因此请仔细检查您的版本:
#include<vector>
template <class Key, class CollT = std::vector<Key> >
CollT* delete_(Key kValue)
{
return new CollT;
}
int main()
{
return 0;
}
#包括
模板
CollT*delete_(键kValue)
{
返回新的CollT;
}
int main()
{
返回0;
}
建立:
g++模板def.cpp-std=c++0x
根据评论进行编辑:
1) replace typename with class within template definition (both class CollT and typename CollT seems fine)
2) replaced `vector<int>` with `vector<Key>`
3) compiling without flag, will give you the following error: default template arguments may not be used in function templates without -std=c++0x or -std=gnu++0x
1)用模板定义中的类替换typename(类CollT和typename CollT似乎都可以)
2) 将“vector”替换为“vector”`
3) 在没有标志的情况下编译会出现以下错误:在没有-std=c++0x或-std=gnu++0x的函数模板中不能使用默认模板参数
您可能还希望将“模板”替换为“模板我已更改为您建议的内容,现在我收到一个错误:“CollT”未在此范围内声明|您可能还希望将“模板”替换为“template我已更改为您提出的内容,现在我遇到一个错误:“CollT”未在此范围内声明|您将类
更改为类型名
,并且在向量
上包含了一个模板参数;为什么这些更改都需要根据C++0x标准而不是默认标准进行编译?模板化函数中当前不允许使用默认模板参数。它们在C++0x中。您将类
更改为类型名
,并且在向量
中包含了一个模板参数;为什么这些更改都需要根据C++0x标准而不是默认标准进行编译?模板化函数中当前不允许使用默认模板参数。它们在C++0x中。