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

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

如何将模板参数设置为

func
方法的返回类型 类
BazClass
不与类模板冲突

#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

高于编译器参数,它会引发低于编译时错误

program.cpp:37:3: error: use of class template 'FooClass' requires template arguments; argument deduction not allowed in function return type
  FooClass func();
  ^~~~~~~~
program.cpp:29:7: note: template is declared here
class FooClass{
      ^
program.cpp:42:1: error: use of class template 'FooClass' requires template arguments; argument deduction not allowed in function return type
FooClass BazClass <C> ::func(){
^~~~~~~~
ElevenX.cpp:29:7: note: template is declared here
class FooClass{
      ^
program.cpp:44:10: error: no viable conversion from returned value of type 'FooClass<int>' to function return type 'int'
  return fooins;
         ^~~~~~
3 errors generated.

据我了解,问题不在于指定模板参数,

第 13 行:

  FooClass func(); //Line 13

和第 18 行:

FooClass BazClass <C> ::func(){ //Line 18

但我的问题是我不知道如何在这些地方指定模板参数? (对于之前的错误的错误信息我真的很抱歉)

c++ class templates methods arguments
1个回答
0
投票
FooClass func();

指定

func
返回
FooClass
,但未指定
T
将使用什么
FooClass
。因此:

FooClass<C> func();

如果您同意将

C
指定为
T

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