为何报错‘Coin::Coin()类外声明非定义’?C++构造器问题求助
问题原因与解决方法
你的编译错误出在构造函数的定义上:你在类外部写的Coin::Coin();只是重复声明构造函数,而非提供它的定义(即没有函数体),编译器无法识别这个构造函数的具体实现,因此抛出错误。
修复步骤
方法1:在类内部直接定义构造函数
修改Coin类的定义,给构造函数加上空的函数体:
#include <iostream> #include <cstdlib> using namespace std; class Coin { private: public: Coin() {} // 直接在类内定义构造函数 int toss(); }; int Coin::toss() { int num; num = rand() % 2; return num; } int main() { Coin C; cout << C.toss() << endl; }
方法2:在类外部定义构造函数
把类外的Coin::Coin();修改为带函数体的定义:
#include <iostream> #include <cstdlib> using namespace std; class Coin { private: public: Coin(); int toss(); }; Coin::Coin() {} // 这里加上函数体,完成构造函数定义 int Coin::toss() { int num; num = rand() % 2; return num; } int main() { Coin C; cout << C.toss() << endl; }
额外优化建议
当前代码使用rand()会导致每次运行程序,抛硬币的结果序列都一样,因为随机数种子默认是固定的。可以在main函数开头添加随机数种子初始化,让结果更符合真实随机:
#include <ctime> // 需要添加这个头文件 int main() { srand(time(0)); // 用当前时间作为随机数种子 Coin C; cout << C.toss() << endl; }
内容的提问来源于stack exchange,提问作者asvalk1672
相关产品推荐
相关产品推荐

