我正在尝试创建一个ofstream,然后将数组中的值写入其中。
void Graph::toFile(char* filename)
{
ofstream outfile(filename.c_str()+"_new.txt");
for(int i = 0; i < noOfVertices; i++)
outfile << graphPartition[i] << endl;
outfile.close();
}
我的主要问题是,我希望输出文件名为filename+"new.txt"
。但是,我的方法有问题,因为我不断收到错误expression must have class type
。
我真的很抱歉,如果这个问题是重复的,我还没有找到令人满意的解决方案。
答案 0 :(得分:4)
您的问题是filename
不是std::string
它是一个C字符串(char*
)。 C字符串不是对象,它们没有方法,它们只是指向内存中零终止字符数组的指针。
filename.c_str()
-^-
这个方法的第二个问题,如果filename是std :: string,那就是添加两个C字符串指针并不会连接字符串,它只是对指针进行数学运算,给你一个地址等于filename.c_str()返回的地址加上地址&#34; _new.txt&#34;
如果您更改代码以接收文件名为std :: string
void Graph::toFile(std::string filename)
然后您可以执行以下操作:
filename += "_new.txt";
如下:
void Graph::toFile(std::string filename)
{
filename += "_new.txt";
ofstream outfile(filename.c_str());
或
void Graph::toFile(std::string filename)
{
ofstream outfile(filename + "_new.txt");
演示:
#include <iostream>
#include <string>
void Graph_toFile(std::string filename)
{
filename += "_new.txt";
std::cout << "opening " << filename << "\n";
}
int main() {
Graph_toFile("hello_world");
return 0;
}