Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.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++ 为什么在GCC4.4.1中我不能在函数模板中声明默认参数? 在这里: 他们说fnc中的dflt tmp参数由他们的4.4版本支持。我运行了4.4.1版,当我试图编译时:_C++_Gcc - Fatal编程技术网

C++ 为什么在GCC4.4.1中我不能在函数模板中声明默认参数? 在这里: 他们说fnc中的dflt tmp参数由他们的4.4版本支持。我运行了4.4.1版,当我试图编译时:

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

猜猜这个d是干什么用的?;)

#包括
模板
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中。