【问题标题】:Getting "expected a class or namespace"获得“预期的类或命名空间”
【发布时间】:2014-03-14 21:06:26
【问题描述】:

我决定使用 C++ 在近十年没有弄乱它之后,我遇到了一些代码问题,并且很难理解哪里出了问题。我见过几个相关的问题,expected a class or namespaceExpected a class or namespace; syntax is proper and correct。以及花费数小时尝试研究其他的,我仍然无法弄清楚。

ma​​inwindow.hpp

class MainWindow : public QMainWindow {
    Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();
    std::vector<Card> cards;

    // Events:
public slots:
    void shuffle();

private:
    Ui::MainWindow *ui;
};

ma​​inwindow.cpp

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow) {

    ...

    // Spades
    cards.push_back(Card(Suit::SPADES, Value::ACE)); // <- getting the errors here
    cards.push_back(Card(Suit::SPADES, Value::TWO)); // <-
}

Card 类只有一个带有 Suit suit, Value value 的 ctor,它来自另一个文件。

我很难理解为什么会出现此错误:

expected a class or namespace
   cards.push_back(Card(Suit::SPADES, Value::ACE));
                ^

【问题讨论】:

    标签: c++ stdvector


    【解决方案1】:

    我想我已经弄清楚你做错了什么:)

    您应该发布的是正是下面的代码,而不是正确的部分。这就是我们诊断问题所需的全部内容。您的问题与 Qt 等无关。真的:最小化是关键。它节省了每个人的时间。你和我们的。

    #include <vector>
    
    enum Suit { SPADES };
    enum Value { ACE, TWO };
    
    class Card {
    public:
       Card(Suit, Value) {}
    };
    
    int main()
    {
       std::vector<Card> cards;
       // Correct
       cards.push_back(Card(SPADES, ACE));
       cards.push_back(Card(SPADES, TWO));
       // Wrong since Suit and Value are not classes nor namespaces,
       // they are merely enum tags.
       cards.push_back(Card(Suit::SPADES, Value::ACE));
       cards.push_back(Card(Suit::SPADES, Value::TWO));
       return 0;
    }
    

    【讨论】:

    • 也感谢关于真正需要什么的提示。你去的级别越低,你需要显示的代码越多。;)
    • 哦,这就是 C# 枚举习语(或多或少):-)。
    猜你喜欢
    • 2011-10-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-16
    • 1970-01-01
    • 1970-01-01
    • 2021-12-31
    • 1970-01-01
    相关资源
    最近更新 更多