创建类对象时遭遇构造函数错误,求技术解决方案(附代码)
排查Hyogen类构造函数相关错误的思路
看起来你在创建Hyogen类对象时碰到了构造函数相关的问题,我结合你给出的代码片段,梳理几个常见的错误点和解决方向:
1. 构造函数代码不完整
你提供的构造函数里err_op =...是截断状态,这会直接触发编译语法错误——编译器无法识别不完整的赋值语句,必须给err_op以及其他未初始化的成员变量明确赋值。
2. 内置类型成员未初始化
类中的p_close、p_open是int类型的内置成员,C不会自动初始化这类成员,后续使用它们时会触发未定义行为。建议在构造函数里统一给这些变量赋初始值(比如0),也可以在成员声明时直接初始化(C11及以上标准支持)。
3. 字符串参数的const限定符问题
构造函数的参数是char *a,但如果你传入的是字符串字面量(比如Hyogen obj("example");),在C++11及之后的标准里,字符串字面量是const char*类型,直接赋值给char*会因为丢弃const限定符触发编译错误。
解决方法有两种:
- 如果不需要修改字符串内容,把构造函数参数和成员变量都改成
const char*; - 如果需要修改字符串,要手动分配内存并拷贝内容,避免直接赋值导致的悬空指针或修改只读内存问题。
4. 不要直接包含.cpp文件
你的代码里写了#include "Functions.cpp",这是不规范的写法——直接包含.cpp文件会导致函数/变量被多次定义,引发链接错误。建议改成包含对应的头文件(比如#include "Functions.h")。
修正后的构造函数示例代码
#include <iostream> #include "Pila.h" #include "Functions.h" // 替换成头文件包含 #include <cstring> using namespace std; int error = 0; class Hyogen{ private: const char *kozui; // 调整为const char* int p_close = 0; // 成员声明时直接初始化 int p_open = 0; int err_par = 0; int err_op = 0; int err_end = 0; int err_start = 0; public: Hyogen(const char *a); // 参数调整为const char* bool Verify(); char *Elaborate(); void Errors(); }; // 构造函数实现,也可以用成员初始化列表更高效 Hyogen::Hyogen(const char *a) : kozui(a), p_close(0), p_open(0), err_par(0), err_op(0), err_end(0), err_start(0) { // 如果需要修改字符串内容,改用内存拷贝: // kozui = new char[strlen(a) + 1]; // strcpy(kozui, a); }
如果你有具体的错误提示(比如编译报错信息、运行时崩溃表现),可以补充出来,这样能更精准地定位问题。
内容的提问来源于stack exchange,提问作者manupera
相关产品推荐
相关产品推荐

