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