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

多文件C++项目调用类成员函数提示CreateDeck标识符未定义

错误原因

CreateDeck是CStack类的非静态成员函数,C++规定非静态成员函数必须通过类的实例对象调用,你直接在全局作用域调用CreateDeck(),编译器只会在全局作用域查找该函数,自然会报标识符未定义的错误。

可选解决方案

方案1:通过类实例调用成员函数

如果你的设计逻辑是CreateDeck用于初始化已有的栈对象,直接修改main函数的调用逻辑即可:

#include "Header.h"

int main()
{
    // 先创建CStack类的实例
    CStack stackInstance;
    // 通过实例调用成员函数
    CStack* deck = stackInstance.CreateDeck();
}

方案2:将CreateDeck改为类静态成员函数

如果你的设计逻辑是CreateDeck作为工厂方法,用来生成新的CStack对象,不需要依托已有实例调用,可以修改头文件中的函数声明,添加static修饰:

#pragma once
class CStack
{
private:
    int* topCardType;
    int* topCardValue;
    int cardType[52];
    int cardValue[52];
    int size;

public:
    // 声明为静态成员函数
    static CStack* CreateDeck();
};

调用时通过类名加作用域解析符调用即可:

#include "Header.h"

int main()
{
    CStack* deck = CStack::CreateDeck();
}

注意:你当前Functions.cpp中的CreateDeck是空实现,实际使用时需要补全对象创建、属性初始化的逻辑,否则会返回野指针导致运行异常。

内容的提问来源于stack exchange,提问作者Fayas Mohamed

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 15:48:03