C ++构造函数/类问题:错误 - 必须有class / struct / union

时间:2011-09-23 08:57:48

标签: c++

我意识到这个错误意味着什么,令我困惑的是为什么我得到它。为了这个问题,我已经在这个小程序中模拟了错误。这是代码:

源文件:

#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 ++,所以我确定它非常简单,但为什么空括号不起作用?顺便说一下,如果我只有一个没有参数的构造函数,或者一个带有默认参数的构造函数,它也不起作用。

1 个答案:

答案 0 :(得分:4)

这个

NumberGame newNumberGame();

声明函数newNumberGame()不带参数并返回NumberGame

C ++的语法是在几十年内发展起来的,而不是单一的创作行为。因此,它有许多需要解决的含糊之处。这种歧义已经解决,a b()是一个函数声明而不是一个对象定义。