从对象函数调用返回int(基本) 我刚开始看C++,我遇到了一些问题,我无法左右。< /P>

从对象函数调用返回int(基本) 我刚开始看C++,我遇到了一些问题,我无法左右。< /P>,c++,C++,我正在尝试做一些简单的事情,比如创建一个带有函数的类,调用该函数并读取返回值 然而,我被困在我认为是一个小问题 我知道是main对Die->randomNumber的呼叫导致了这个错误,但我不知道为什么。我甚至试图在没有任何运气的情况下从函数返回数字12 错误: 我有3个文件(main.cpp、Die.h和Die.cpp) main.cpp #include <string> #include "Die.h" using namespace std; int main() {

我正在尝试做一些简单的事情,比如创建一个带有函数的类,调用该函数并读取返回值

然而,我被困在我认为是一个小问题

我知道是main对Die->randomNumber的呼叫导致了这个错误,但我不知道为什么。我甚至试图在没有任何运气的情况下从函数返回数字12

错误:

我有3个文件(main.cpp、Die.h和Die.cpp)

main.cpp

#include <string>

#include "Die.h"

using namespace std;

int main() {
    Die * test = new Die();

    cout << std::to_string(test->randomNumber(4)) << endl;

    return 0;
}
#include "Die.h"

Die::Die()
{
}


Die::~Die()
{
}

void Die::init() {

}

int randomNumber(int max) {
    srand(static_cast<unsigned int>(time(0)));
    return (rand() % max + 1);
}

void rollDie(int& die1, int& die2) {

}

void rollDie(int* die1, int* die2) {

}
#包括
#包括“Die.h”
使用名称空间std;
int main(){
模具*测试=新模具();

cout randomNumber(4))您在声明
randomNumber
rollDie
时缺少类说明符

int-Die::随机数(int-max)


如果没有这些函数,您只是声明了一个名为
randomNumber
的全局函数,但是链接器正在尝试选择它找不到的
Die::randomNumber

randomNumber
rollDie
的声明中缺少类说明符

int-Die::随机数(int-max)


如果没有这些函数,您只是声明一个名为
randomNumber
的全局函数,但是链接器正在尝试选择它找不到的
Die::randomNumber

Die.cpp
中,您需要使用类名作为成员函数的前缀:

int Die::randomNumber(int max) { ... }

void Die::rollDie(int& die1, int& die2) { ... }

void Die::rollDie(int* die1, int* die2) { ... }

否则,编译器会认为您只是在定义全局函数。如果您不告诉它,就没有理由怀疑它们应该是类的成员。

Die.cpp
中,您需要在成员函数前面加上类名:

int Die::randomNumber(int max) { ... }

void Die::rollDie(int& die1, int& die2) { ... }

void Die::rollDie(int* die1, int* die2) { ... }

否则,编译器会认为您只是在定义全局函数。如果您不告诉它,就没有理由怀疑它们应该是类的成员。

作为旁白:不要在
randomNumber
中调用
srand()
——在
main()中调用一次
。如前所述,您在一秒钟内每次掷骰子时都会得到相同的随机数,因为您正在为每次调用重新播种RNG。注意,感谢将srand移至main:)副本的相关答案:。这是一个大标题的部分,其中指出一个常见错误是忘记限定名称。我在询问之前进行了搜索对于这个问题,我很少在这里问任何问题。但是我找不到解决问题的方法。但是,是的,我可以在问之前做更多的搜索。作为旁白:不要在
randomNumber
中调用
srand()
——在
main()中调用一次
。如前所述,您在一秒钟内每次掷骰子时都会得到相同的随机数,因为您正在为每次调用重新播种RNG。注意,感谢将srand移至main:)副本的相关答案:。这是一个大标题的部分,其中指出一个常见错误是忘记限定名称。我在询问之前进行了搜索对于这个问题,我很少在这里问任何问题。但是我找不到解决问题的方法。但是是的,我可以在问之前做更多的搜索。