名称中的ofstream变量

时间:2016-06-28 21:29:22

标签: c++ filenames ofstream

我正在尝试创建一个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

我真的很抱歉,如果这个问题是重复的,我还没有找到令人满意的解决方案。

1 个答案:

答案 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;
}

http://ideone.com/eAnfZQ