错误 C2679:二进制'<<':找不到采用类型 'void' 的右侧操作数的运算符(或者没有可接受的转换)

error C2679: binary '<<' : no operator found which takes a right-hand operand of type 'void' (or there is no acceptable conversion)

本文关键字:lt 运算符 或者 操作数 可接受 转换 void 找不到 二进制 C2679 错误      更新时间:2023-10-16

我不确定问题出在哪里。它给了我错误:

错误C2679:binary'<lt;':找不到接受类型为"void"的右侧操作数的运算符(或者没有可接受的转换)

我使<lt;所以它不应该给我这个错误,对吧?

#ifndef ANIMAL_H_
#define ANIMAL_H_ 
#include <iostream> 
#include <string>
using namespace std;
static int counter;
static int getAnimalCount() { return counter; }
class Animal {
    protected:
       string *animalType;
    public:
       virtual void talk() = 0;
       virtual void move() = 0;
       string getAnimalType() { return *animalType; }
               //PROBLEM RIGHT HERE V
       friend ostream& operator<<(ostream&out, Animal& animal) {
           return out << animal.getAnimalType() << animal.talk() << ", " << animal.move();
       };
       ~Animal() {
           counter--;
           animalType = NULL;
       }
 };
 class Reptile : public Animal { 
     public:
         Reptile() { animalType = new string("reptile"); };
 };
 class Bird : public Animal {
     public:
         Bird() { animalType = new string("bird"); };
 };
 class Mammal : public Animal{
     public:
         Mammal() { animalType = new string("mammal"); };
 };
 #endif /* ANIMAL_H_ */

virtual void talk() = 0;指定返回类型为void的函数。这意味着它不会返回任何内容。将Animal::move定义为virtual void move() = 0;时也会发生同样的情况。

out << animal.getAnimalType() << animal.talk() << ", " << animal.move();尝试打印animal.talk()的结果和animal.move()的结果-两者都不存在(请记住,talk()move()都不返回任何值!)

您过载的<<运算符如下所示:

return out << animal.getAnimalType() << animal.talk() << ", " << animal.move();

首先,talk()move()方法返回void。无法打印void。

点在代码生成器上。我有一个类成员Dot.printX(),在输出流中我使用了cout<<Dot.printX<<endl;,所以导致了一个错误。

添加printX()将解决问题!

祝你好运!

这个程序也会发生这种情况

#include <iostream>
void UNH(double b)
{
    std::cout << UNH(b) << std::endl;
}
int main()
{
    UNH(5); 
    return 0;
}

问题是虚空根本无法取得印刷价值。同样对于转换规则,它也不起作用,