gpt4 book ai didi

c++ - strcpy() 导致从 ‘const char*’ 到 ‘char*’ 的无效转换 [-fpermissive]

转载 作者:太空狗 更新时间:2023-10-29 23:51:04 24 4
gpt4 key购买 nike

我试图让一个名为 PReader 的对象(带有一个名为 Execute() 的函数,不带任何参数)有一个通过构造函数传入的文件名,所以 Execute() 可以访问它。我尝试设置它的方式涉及让构造函数为字符串分配内存,然后将其复制过来,并为其设置析构函数。我知道这很尴尬,但我知道此设置将使我的项目将来更容易添加。

这是我的对象当前的设置方式:

#include <PReader.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>

PReader::PReader(const char *f)
{
filename = new char[strlen(f)+1];
strcpy(filename, f);
}

PReader::~PReader()
{
delete [] filename;
}

void PReader::Execute(void)
{
FILE *f = fopen(this->filename, "rb");
...
}

这是给我的错误:

PReader.C: In constructor ‘PReader::PReader(char*)’:
PReader.C:10:20: error: invalid conversion from ‘const char*’ to ‘char*’ [-fpermissive]
strcpy(filename, f);
^
In file included from /usr/include/stdlib.h:11:0,
from PReader.C:2:
/usr/include/string.h:30:8: error: initializing argument 1 of ‘char* strcpy(char*, const char*)’ [-fpermissive]
char *_EXFUN(strcpy,(char *__restrict, const char *__restrict));

对于这么少的代码行,我有点惊讶我在这里遗漏了一些东西。我该怎么做才能确保转换成功,如我所愿?

编辑:PReader.h:

#include "source.h"

#ifndef PREADER_H
#define PREADER_H

class PReader : public Source
{
public:
const char* filename;
PReader(const char *filename);
virtual ~PReader();
virtual void Execute();
};

#endif

最佳答案

您似乎将 filename 定义为 const char*。改为将其设为 char*,这样您就可以实际修改它(使用 strcpy):

char* filename;

或者更好,因为这是 C++,为什么不使用 std::string

关于c++ - strcpy() 导致从 ‘const char*’ 到 ‘char*’ 的无效转换 [-fpermissive],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24135424/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com