调用成员函数,在课堂外声明

时间:2012-08-07 20:54:44

标签: c++ visual-studio-2010 function member-functions

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

'随机m; 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.
};

请帮我解决我出错的地方。 非常感谢所有帮助

3 个答案:

答案 0 :(得分: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.

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

答案 1 :(得分: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
}

答案 2 :(得分:0)

出现问题的是你有一个错误调用函数的语法,它与声明一个函数的语法不同。如果要调用函数,则给出函数的名称,然后是parens。在parens之间你提出了你需要提供的任何论据。您可能希望使用函数的返回值执行某些操作。现在我并没有真正遵循你想要做的事情,但是这样的事情可能就是你想要的。

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

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

任何关于C ++的书都会涉及到这一点,可能值得投资。