我意识到这个错误意味着什么,令我感到困惑的是为什么我得到它。为了这个问题,我已经在这个小程序中模拟了错误。这是代码:
源文件:
#include "RandomGame.h"
using namespace std;
NumberGame::NumberGame(int i)
{
upperBound = i;
numberChosen = 1 + rand() % upperBound;
}
NumberGame::NumberGame()
{
upperBound = 1000;
numberChosen = 1 + rand() % upperBound;
}
int NumberGame::guessedNumber(int g)
{
if (g == numberChosen)
{
return 2;
}
else if (g < numberChosen)
{
return 0;
}
else
{
return 1;
}
}
头文件:
#ifndef NUMBERGAME_H
#define NUMBERGAME_H
#include <iostream>
using namespace std;
class NumberGame
{
private:
int upperBound;
int numberChosen;
int g;
public:
NumberGame(int);
NumberGame();
int guessedNumber(int);
};
#endif
主要:
#include <iostream>
#include <cstdlib>
#include "RandomGame.h"
using namespace std;
int makeEven(int);
int main()
{
//only one of these lines will remain uncommented
NumberGame newNumberGame(5); // works
NumberGame newNumberGame; // works
NumberGame newNumberGame(); // doesn't work
// I get the error here, apparently when using empty brackets, newNumberGame
//is not a class anymore. wwwhhyyyyy??????
newNumberGame.guessedNumber(5);
return 0;
}
我已经有一段时间没有做C ++了,所以我确定它确实很简单,但是为什么不使用空括号呢?顺便说一句,如果我只有一个不带参数的构造函数,或者一个带默认参数的构造函数,它也不起作用。
最佳答案
这个
NumberGame newNumberGame();
声明一个不带参数且返回
newNumberGame()
的函数NumberGame
。C ++的语法已经发展了几十年,而不是一次创造就被设计出来。因此,它有许多歧义需要解决。解决了
a b()
作为函数声明而不是对象定义的歧义。关于c++ - C++构造函数/类问题:错误-的左侧必须具有类/结构/union ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7526538/