由于一个奇怪的原因,我的代码无法编译

My code does not compile for a strange reason

本文关键字:代码 我的 编译 于一个      更新时间:2023-10-16
#include <iostream>
using namespace std;
class Vehicule {
public:
    void affiche() const {
        cout << "Ceci est un vehicule." << endl;
    }
protected:
    int m_prix;
};
class Voiture : public Vehicule {
public:
    void affiche() const {
        cout << "Ceci est une voiture." << endl;
    }
private:
    int m_portes;
};
class Moto : public Vehicule {
public:
    void affiche() const {
        cout << "Ceci est une moto." << endl;
    }
private:
    double m_vitesse;
};
void presenter(Vehicule v) {
    v.affiche();
}
int main() {
    Vehicule v;
    presenter(v);
    Moto m;
    presenter(m);
    system("PAUSE");
    return 0;
}

这段代码无法编译。你知道为什么吗?Visual Studio说m和v被使用了,但没有初始化。难道不是吗?我的意思是,我初始化它们

这段代码无法编译。我再说一遍。不编译

我得到的错误(不是警告,这是一个错误)是:

未初始化的局部变量'm'被使用使用未初始化的局部变量"v"

C4700是一个警告,而不是错误。你的代码编译得很好。它只是告诉您成员m_vitesse, m_portesm_prix未初始化。如果要初始化它们,需要为这些类提供它们自己的构造函数,例如:

class Vehicule {
public:
    // This constructor initializes m_prix to 0
    Vehicule() : m_prix(0) { }
    void affiche() const {
        cout << "Ceci est un vehicule." << endl;
    }
protected:
    int m_prix;
};

你的代码编译,但你得到警告。因为Vehicule有初始化m_prix的默认构造函数。你可以通过添加构造函数来修复它。

class Vehicule {
public:
  Vehicule():m_prix(0){};
    void affiche() const {
        cout << "Ceci est un vehicule." << endl;
    }

Visual Studio抱怨,因为你没有初始化类的数据成员(m_prix, m_portes等)。方法affiche必须是虚的,函数presenter必须通过引用给出它的形参。

class Vehicule {
public:
    virtual void affiche() const {
        cout << "Ceci est une voiture." << endl;
    }
};
void presenter(const Vehicle& v) {
    v.affiche()
}
相关文章: