如何在不与 C++ 中的类模板冲突的情况下设置模板参数以返回类方法的类型
#include <iostream>
//Declarations goes here...
template <class T>
class FooClass{
public:
T foo;
};
template <class C>
class BazClass{
public:
FooClass func(); //Line 13
};
//Definitions goes here...
template <class C>
FooClass BazClass <C> ::func(){ //Line 18
FooClass <int> fooins;
return fooins;
}
int main(){
BazClass <int> bazins;
bazins.func();
return 0;
}
当我用 . 。 .
g++ -std=c++17 -o program program.cpp
高于编译器参数,它会引发低于编译时错误
In file included from program.cpp:1:
./program.hpp:20:5: error: use of class template 'Time' requires template arguments; argument deduction not allowed in function return type
Time reset();
^~~~
./program.hpp:13:9: note: template is declared here
class Time: public GlassClass <T>{
^
program.cpp:17:3: error: use of class template 'Time' requires template arguments; argument deduction not allowed in function return type
Time Clock <C> ::reset(){
^~~~
./program.hpp:13:9: note: template is declared here
class Time: public GlassClass <T>{
^
program.cpp:20:12: error: no viable conversion from returned value of type 'Time<int>' to function return type 'int'
return time;
^~~~
3 errors generated.
据我了解,问题不在于指定模板参数,
第 13 行:
FooClass func(); //Line 13
和第 18 行:
FooClass BazClass <C> ::func(){ //Line 18
但我的问题是我不知道如何在这些地方指定模板参数?
问题在于
FooClass
是类模板的 名称,并且 不是类类型本身,并且函数的返回类型需要是 type。
因此,要解决这个问题,您需要向
FooClass
提供模板参数,如下所示:
template <class C>
class BazClass{
public:
//--------vvv----------->added this template argument list to make it a class type
FooClass<C> func();
};
在其他需要类型而不是类模板的地方也应该这样做。