我已经决定在不搞乱C ++的情况下接受C ++,并且我遇到了一些代码问题,并且很难理解错误。我已经看到了几个相关的问题,expected a class or namespace和Expected 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));
^
答案 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;
}