C++ 编译器与C++;大堆
我不熟悉c++(java背景),对数组有一个奇怪的问题。 我有以下涉及掷骰子的代码,数组用于存储以前的骰子C++ 编译器与C++;大堆,c++,arrays,class,C++,Arrays,Class,我不熟悉c++(java背景),对数组有一个奇怪的问题。 我有以下涉及掷骰子的代码,数组用于存储以前的骰子 #include <stdlib.h> //c file for random number generator #include <iostream> #include "Dice.h"; using namespace std; int previousTurns[10]; int count = 0; void Dice::roll() { cout
#include <stdlib.h> //c file for random number generator
#include <iostream>
#include "Dice.h";
using namespace std;
int previousTurns[10];
int count = 0;
void Dice::roll()
{
cout<<"Rolling Dice....";
int seed = rand() %100;
srand(seed);
int roll = rand() %6 + 1;
cout<<"You have rolled a " << roll << "\n";
previousTurns[count] = roll;
count++;
}
除了“previousTurns[count]=roll”这一行之外,所有这些代码都能正常工作,一旦到达这一行,编译器就会崩溃,不会出现任何错误
int previousTurns[10];
int count = 0;
这些与Dice
的previousTurns
和count
成员不同。实际上,它们是完全不相关的变量,只是碰巧有相同的名称。另一方面,成员count
在此处未初始化:
previousTurns[count] = roll;
请注意,在成员函数中,它是成员count
,而不是int count=0中的成员代码>。您应该在构造函数中初始化它,如下所示:
Dice::Dice() : count(0) {}
还要注意,您应该只调用一次(例如在构造函数中)而不是每次滚动一个数字。您使用的是什么编译器?你能创建一个please吗?你滚动了多少次….?你有previousTurns
和count
两次,一次在类中,一次在源文件中声明为globals。这不应该是问题,但至少让人困惑…,也许是问题。您初始化了count
,但是否初始化了Dice::count
?如果您不这样做,那么previousTurns[count]
是未定义的行为,您可以使用std::vector
。那张extendArray
看起来不祥。投票关闭,因为缺少可复制的示例。啊,我明白了,所以您不需要再次定义头文件中定义的变量?例如,我可以在头文件中初始化count=0,然后在源文件中使用Dice::count?也就是说,Dice::count与count不同(被视为不同的变量)……当然它与Java不同。没有冒犯,但是如果你认为你可以进入一个中等级别的C++,因为你知道java,那么你就走错了路。酷,有没有办法包括CPP文件,即,不带头文件的类来避免这个命名约定问题(即:骰子:计数VC++),或者是C++JMANXC中的坏习惯,我不理解这个问题。您不需要int count=0代码>在源文件中是的,我现在知道我没有,我已经从文件中删除了count,因为我在主驱动程序中包含了.h,我已经在头文件中包含了这些变量定义。我的问题是,是否可以创建一个没有头文件的类文件(即在.cpp文件中定义类),并将该.cpp文件包含在主驱动程序中。这将允许我使用“int count”而不是“Dice::count”,或者说包含cpp文件而不是.h文件是一种不好的做法。
Dice::Dice() : count(0) {}