如何在 C++ 中设置模板参数以返回类方法的类型[重复]

问题描述 投票:0回答:1

如何在不与 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

但我的问题是我不知道如何在这些地方指定模板参数?

c++ class templates types arguments
1个回答
0
投票

问题在于

FooClass
是类模板名称,并且 不是类类型本身,并且函数的返回类型需要是 type

因此,要解决这个问题,您需要向

FooClass
提供模板参数,如下所示:

template <class C>
class BazClass{
public:
//--------vvv----------->added this template argument list to make it a class type
  FooClass<C> func(); 
};

在其他需要类型而不是类模板的地方也应该这样做。

© www.soinside.com 2019 - 2024. All rights reserved.