CPP,错误,类,没有匹配,即使声明已经给出

CPP, error, classes, no match for even though the declaration is given

本文关键字:声明 错误 CPP      更新时间:2023-10-16

我正在为我的类编写代码,并且有一个我无法处理的错误。错误如下。此外,我不允许更改主文件中的任何内容:

In file included from lab13.cpp:15:0:
lab13.h: In member function ‘TSeries& TSeries::operator()(int, int)’:
lab13.h:10:39: warning: no return statement in function returning non-void [-Wreturn-type]
         TSeries &operator()(int, int){}
                                       ^
g++ -c -Wall lab13f.cpp
In file included from lab13f.cpp:1:0:
lab13.h:15:10: error: ‘ostream’ in namespace ‘std’ does not name a type
   friend std::ostream &operator<<(std::ostream &o,const TSeries &ts);
          ^
lab13.h: In member function ‘TSeries& TSeries::operator()(int, int)’:
lab13.h:10:39: warning: no return statement in function returning non-void [-Wreturn-type]
         TSeries &operator()(int, int){}
                                       ^
lab13f.cpp: At global scope:
lab13f.cpp:13:9: error: prototype for ‘TSeries TSeries::operator()(int, int)’ does not match any in class ‘TSeries’
 TSeries TSeries::operator()(int, int){}
         ^
In file included from lab13f.cpp:1:0:
lab13.h:10:18: error: candidate is: TSeries& TSeries::operator()(int, int)
         TSeries &operator()(int, int){}
                  ^
lab13f.cpp:16:9: error: prototype for ‘TSeries TSeries::operator+(TSeries&)’ does not match any in class ‘TSeries’
 TSeries TSeries::operator+(TSeries &ts){
         ^
In file included from lab13f.cpp:1:0:
lab13.h:9:17: error: candidate is: const TSeries TSeries::operator+(const TSeries&) const
   const TSeries operator+(const TSeries &ts)const;
                 ^
lab13f.cpp:45:19: error: definition of implicitly-declared ‘TSeries::~TSeries()’
 TSeries::~TSeries(){}
                   ^
lab13f.cpp: In member function ‘TSeries& TSeries::operator=(TSeries (*)(int, int))’:
lab13f.cpp:47:52: warning: no return statement in function returning non-void [-Wreturn-type]
 TSeries &TSeries::operator=(TSeries(int a, int b)){}
                                                    ^
lab13f.cpp: In function ‘std::ostream& operator<<(std::ostream&, const TSeries&)’:
lab13f.cpp:51:1: warning: control reaches end of non-void function [-Wreturn-type]
 }
 ^
make: *** [lab13f.o] Błąd 1
我花了好几天试图解决这个问题,最后还是放弃了。希望有人能帮助我摆脱困境:)我会非常感激的。

我忘了补充,主文件是导师写的,在任何情况下我都不允许改变任何东西。

    TSeries &operator=(TSeries(int a, int b));

声明了一个函数,该函数的参数是一个函数,该函数有两个输入类型为int,返回类型为TSeries

我认为你不是故意的。

复制赋值操作符的声明语法为:

    TSeries &operator=(TSeries const& rhs);

还有,你那句话的意思也不太清楚:

     TSeries series4=series1(2,4);

也许,你想用:

     // Will use the compiler generated copy constructor
     // since you haven't declared one.
     TSeries series4=series1;

     // Will use the constructor that takes two ints
     TSeries series4(2,4);

可能是打错了。:

TSeries series4=series1(2,4);

不使用构造函数参数24创建series4,而是尝试调用series1的(注意:这是变量)operator()(int, int)。没有定义这样的操作符

我猜你需要

TSeries series4=TSeries(2,4);

或者更好:

TSeries series4(2,4);

同样,像这样的结构:

series1+=1.,0.,3.;

实际上只调用operator +=一次。澄清一下,我不确定你们是否期望这样。你可以在c++中读到operator,
所以,如果你想添加3个,你需要:

series1+=1.;
series1+=0.;
series1+=3.;

还要注意@RSahu关于operator=的回答,我给它点了赞(很好,我没有注意到)。

编译器报错,因为series1(2,4)调用的是TSeries::operator()(int, int),而不是构造函数TSeries(int, int)