我意识到这个错误意味着什么,令我困惑的是为什么我得到它。为了这个问题,我已经在这个小程序中模拟了错误。这是代码:
源文件:
#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 ++,所以我确定它非常简单,但为什么空括号不起作用?顺便说一下,如果我只有一个没有参数的构造函数,或者一个带有默认参数的构造函数,它也不起作用。
答案 0 :(得分:4)
这个
NumberGame newNumberGame();
声明函数newNumberGame()
不带参数并返回NumberGame
。
C ++的语法是在几十年内发展起来的,而不是单一的创作行为。因此,它有许多需要解决的含糊之处。这种歧义已经解决,a b()
是一个函数声明而不是一个对象定义。