【发布时间】:2014-07-30 21:17:50
【问题描述】:
我试图让一个名为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
【问题讨论】:
-
请在您的问题中包含来自
PReader.h的PReader的类定义。 -
还有什么是
filename。 -
添加了
PReader.h。filename是const char*。 -
帮宇宙(和你)一个忙,使用 std::string
标签: c++ constructor constants destructor strcpy