2

我想调用'int Random::random(int lower, int upper) 函数,但是我遇到一个问题,说'成员函数可能不会在它的类之外重新声明'我也试图以以下形式提供解决方案以下:

'随机米;m.Random()'

其中说以下问题“函数调用中的参数太少”

下面是 main.cpp 文件

#include <iostream>
#include <cstdlib>
#include <ctime>
using namespace std;

#include "Circle.h"
#include "Random.h"

int main()
{
    Random m;
    m.random();

    // Array 1, below section is to populate the array with random 
    // radius number within lower and upper range
    int CircleArrayOne [5];
    const int NUM = 5;

    srand(time(NULL));

    for(int x = 0; x < NUM; ++x)
    {
        int Random::random(int lower, int upper);
    }

    // output the radius of each circle
    cout << "Below is the radius each of the five circles in the second array. " << endl;

    // below is to output the radius in the array
    for(int i = 0; i < NUM; ++i) 
    {
        cout << CircleArrayOne[i] << endl;
    }

    system("PAUSE");
    return 0;
}


int Random::random(int lower, int upper)
{
    cout << "Enter lower number: " << lower << endl;
    cout << "Enter upper number: " << upper << endl;

    int range = upper - lower + 1;
    return (rand() % range + lower);
}

下面是 Random.h 文件

#pragma once
#include <iostream>
#include <cstdlib>
#include <ctime>
using namespace std;

class Random
{
public:
    static void initialiseSeed();
    // random number initialised
    // random number has been initialised to the current time.

    static int random(int lower, int upper);
    // this function will return a positive random number within a specific lower and 
    // upper boundary.
};

你能帮我解决我哪里出错了吗。非常感谢所有帮助

4

3 回答 3

2

你的原型:

static int random(int lower, int upper);

你的来电:

Random m;
m.random();

您要么需要提供参数,要么需要为它们提供一些默认值。此外,由于该方法是static,因此您不需要实例来调用它。

Random::random(0,100)

足够。

甚至评论也暗示了这一点:

// this function will return a positive random number within a specific lower and 
// upper boundary.

您既不提供下限也不提供上限。

于 2012-08-07T20:56:16.377 回答
2

这里有两个问题。

首先,您调用m.random()- 不存在这样的功能。你需要给它两个 int 参数。另外,因为它是static,所以你根本不需要Random m;你可以使用Random::random(some_int, some_other_int);.

其次,你有这个:

for(int x = 0; x < NUM; ++x)
{
    int Random::random(int lower, int upper);
}

这里实际上有两个问题:首先,这不是函数调用,而是函数声明。函数声明的形式return_type function_name(arg_type arg_name /* etc. */);与您在此处的形式相同。要调用它,您只需将实际值传递给它,而不包括返回值——这就是它会给您的。

其次,您需要将结果实际存储在某个地方。您的评论表明这应该是CircleArrayOne,但您实际上并没有像您声称的那样填充它。

试试这个:

for(int x = 0; x < NUM; ++x)
{
    CircleArrayOne[x] = Random::random(0, 10); // assumed 0 and 10 as the bounds since you didn't specify anywhere; you could use variables here also
}
于 2012-08-07T21:01:26.240 回答
0

问题在于您调用函数的语法错误,它与声明函数的语法不同。如果要调用函数,请给出函数的名称,后跟括号。在括号之间,您可以放置​​您需要提供的任何参数。您可能想对函数的返回值做一些事情。现在我并没有真正遵循你想要做的事情,但这样的事情可能就是你正在寻找的。

int result = Random::random(1, 10);

因此,函数的名称Random::random,后跟参数,在这种情况下为 1 和 10,您可能想要更改这些值。在这种情况下,我从函数调用中获取返回值并将其分配给一个名为result. 同样,您可能想要更改它。

这将包含在任何有关 C++ 的书籍中,可能值得投资一本。

于 2012-08-07T21:02:46.597 回答