ofstream 名称中的变量

ofstream variable in name

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

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

你的问题是 filename 不是 std::string 它是一个 c 字符串 (char*)。 C 字符串不是对象,它们没有方法,它们只是指向内存中以零结尾的字符数组的指针。

filename.c_str()
       -^-

如果文件名是 std::string,使用此方法的第二个问题是添加两个 C 字符串指针不会连接字符串,它只是对指针进行数学运算,给出您的地址等于 filename.c_str() 返回的地址加上“_new.txt”

的地址

如果您更改代码以接收文件名作为 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