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

创建类对象时遭遇构造函数错误,求技术解决方案(附代码)

排查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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 09:57:31