C++构造函数与成员函数无法执行的问题排查
问题分析与解决
你的核心问题是类的定义与实现分离错误,导致实际调用的是空函数:
test.h里定义了一个空实现的Test类(构造函数和print都是空的),而test.cpp里又重新定义了一个全新的Test类,这属于重复定义,且main.cpp包含的是test.h,所以运行时执行的是头文件里的空函数,自然没有输出。- C++规范中,头文件只负责类的声明,成员函数的实现要放在cpp文件中,不能在cpp里重新定义整个类。
修正后的代码
test.h(仅类声明)
#pragma once #include <iostream> // 需包含std::cout依赖的头文件 class Test { public: Test(); // 构造函数声明 void print(); // print函数声明 };
test.cpp(成员函数实现)
#include "test.h" // 实现构造函数 Test::Test() { std::cout << "cout from constructor\n"; } // 实现print函数 void Test::print() { std::cout << "cout from print function\n"; }
main.cpp(调用逻辑)
#include <iostream> #include <string> #include "test.h" int main() { std::cout << "cout from main.cpp\n"; Test t; t.print(); return 0; }
编译注意事项
- 确保编译时将
main.cpp和test.cpp一起编译,比如使用g++命令:g++ main.cpp test.cpp -o main.exe - 在VS或VSCode中,要把
test.cpp添加到项目文件列表中,否则编译器只会编译main.cpp,依旧会使用头文件的空实现。
内容的提问来源于stack exchange,提问作者coldfusion
相关产品推荐
相关产品推荐

