You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何报错‘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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 21:20:28