获得“期望的类或命名空间”

时间:2014-03-14 21:06:27

标签: c++ stdvector

我已经决定在不搞乱C ++的情况下接受C ++,并且我遇到了一些代码问题,并且很难理解错误。我已经看到了几个相关的问题,expected a class or namespaceExpected a class or namespace; syntax is proper and correct。以及花费数小时试图研究其他的,我仍然无法解决这个问题。

mainwindow.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;
};

mainwindow.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));
                ^

1 个答案:

答案 0 :(得分: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;
}