【问题标题】:Invalid operands of types 'float*' and 'float*' to binary 'operator*''float*' 和 'float*' 类型的无效操作数到二进制 'operator*'
【发布时间】:2020-12-07 09:45:04
【问题描述】:

我不知道为什么会出现此错误。就像 a*aa* 视为指针(float*float* 是否与 floatfloat 相同)。显然,当我在子类中声明 a 时,问题已经解决了,但关键是我希望我的子类自动从我的父类中获得它。

当我添加“float a;”时还有一件事到程序可以运行的每个子类。所以我这样做只是为了测试它是否有效,但没有。浮点数 a 在 setA 中没有值。我刚刚添加了 cout

#include"Oblik.h"
#include<cmath>

using namespace std;

class Jednakostranicni : public GeometrijskaFigura{

    float P(){
        return (a*a*sqrt(3))/4; //12    13  C:\Users\Name\Desktop\prvi.cpp  [Error] invalid operands of types 'float*' and 'float*' to binary 'operator*'
    }
    float O(){
        return a+a+a; //15  12  C:\Users\Name\Desktop\prvi.cpp  [Error] invalid operands of types 'float*' and 'float*' to binary 'operator+'
    }
    
};

class Kvadrat : public GeometrijskaFigura{
    
    float P(){
        return a*a;//23 12  C:\Users\Name\Desktop\prvi.cpp  [Error] invalid operands of types 'float*' and 'float*' to binary 'operator*'
    }
    float O(){
        return a+a+a+a;//26 12  C:\Users\Name\Desktop\prvi.cpp  [Error] invalid operands of types 'float*' and 'float*' to binary 'operator+'
    }
    
};

class Krug : public GeometrijskaFigura{
    
    float P(){
        return a*a*3.14;//34    12  C:\Users\Name\Desktop\prvi.cpp  [Error] invalid operands of types 'float*' and 'float*' to binary 'operator*'
    }
    float O(){
        return 2*a*3.14;//37    12  C:\Users\Name\Desktop\prvi.cpp  [Error] invalid operands of types 'int' and 'float*' to binary 'operator*'
    }
    
};

int main(){
    
    GeometrijskaFigura *f;
    int x;
    
    cin>>x;
    
    f->setA(x);
    
    f=new Jednakostranicni;
    cout<<"Jednakostranicni-P: "<<f->P()<<" O: "<<f->O()<<endl;
    f=new Kvadrat;
    cout<<"Kvadrat-P: "<<f->P()<<" O: "<<f->O()<<endl;
    f=new Krug;
    cout<<"Krug-P: "<<f->P()<<" O: "<<f->O()<<endl;
    
    
    
    return 1;
    
    
}

// this is Oblik.h file code
#include<iostream>

using namespace std;

class GeometrijskaFigura{
    protected: float a;
    public:
        
        void setA(float b){
         a=b;
        }
        
        virtual float P()=0;
        virtual float O()=0;
};

【问题讨论】:

标签: c++ class virtual


【解决方案1】:

由于f 未初始化,您有未定义的行为:

GeometrijskaFigura *f;
int x;
    
std::cin >> x;
    
f->setA(x); // UB: use uninitialized f.

应该是

int a;

std::cin >> a;

Jednakostranicni j;
j.setA(a);
std::cout << "Jednakostranicni-P: " << a.P() << " O: " << a.O() << std::endl;

Kvadrat k;
k.setA(a);
std::cout << "Kvadrat-P: " << k.P() << " O: " << k.O() << std::endl;

Krug krug;
krug.setA(a);
std::cout << "Krug-P: " << krug.P() << " O: " << krug.O() << std::endl;

【讨论】:

  • UB 不是运行时的东西吗?至少它只有在通过构建之后才会变得有趣......
  • 严格来说不回答问题。 OP 向二进制 'operator*' 请求“'float*' 和 'float*' 类型的无效操作数”,但发布的代码中没有这样的东西。尽管您确实在发布的代码中解决了问题
  • 我的任务是在 main 中声明 1 个对象,并使用“new”运算符通过该对象声明其他子类。另外,我只是把 cout
猜你喜欢
  • 1970-01-01
  • 2019-03-02
  • 2023-01-26
  • 1970-01-01
  • 2016-07-12
  • 1970-01-01
  • 1970-01-01
  • 2017-07-06
  • 2012-04-16
相关资源
最近更新 更多