多文件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
相关产品推荐
相关产品推荐

