这是不言自明的,但无法正确解决。 这是我的代码。 我需要使用模板才能处理多个文件,写入/读取文件并进行操作。
class MOBILE
{
public:
int id;
string tara;
string brand;
string culoare;
int an;
virtual void fscanf_el(FILE *ptr) = 0;
public:
friend int operator < (const MOBILE&, const MOBILE&);
friend int operator > (const MOBILE&, const MOBILE&);
friend int operator < (const MOBILE&, const int&);
friend int operator > (const MOBILE&, const int&);
friend int operator == (const MOBILE&, const int&);
};
template <typename T> class GG {
public:
vector <T> mas;
int size;
GG(char *file_name) {
FILE *ptr;
ptr = fopen(file_name, "r");
T temp;
MOBILE t[50];
for (int i = 0; i < 50; i++)
{
t[i].fscanf_el(ptr);
mas.push_back(t[i]);
}
fclose(ptr);
size = mas.size();
cout << " " << endl;
}
};
这是我的main.cpp
....
int main() {
GG <MOBILE> my_table_sort("f1.txt");
GG <MOBILE> my_table_unsort("f2.txt");
cout << "****************************************" << endl;
menu_show();
....
我得到的错误是这2行
GG <MOBILE> my_table_sort("f1.txt");
GG <MOBILE> my_table_unsort("f2.txt");
错误是 C2664:“ GG :: GG(GG &&)”:无法将参数1从“ const char [7]”转换为“ char *”
我不知道如何使它工作。 预先感谢。
答案 0 :(得分:0)
无法将参数1从'const char [7]'转换为'char *'
在C ++中,string literal的类型为const char[N]
,其中,N
是字符的数目加上一个空终止。这样,"f1.txt"
和"f2.txt"
都是const char[7]
。
A const char[]
衰变于const char*
指针第一字符。
可以不通过pointer-to-const
,其中一个pointer-to-non-const
,预计(但反转是允许的)。
您的GG()
构造函数将一个非常量char*
指针作为输入,因此,除非您舍弃了它们的const
-ness,否则您无法将字符串文字传递给它:
GG <MOBILE> my_table_sort(const_cast<char*>("f1.txt"));
GG <MOBILE> my_table_unsort(const_cast<char*>("f2.txt"));
更好的解决方案是将GG()
改为使用const char*
,然后可以将char*
和const char*
指针都传递给它。你也应该这样做,因为fopen()
取const char*
作为输入反正:
GG(const char *file_name)
{
FILE *ptr = fopen(file_name, "r");
...
}
可替换地,改变GG()
采取std:string()
代替,这也允许char*
和const char*
输入:
GG(const std::string &file_name)
{
FILE *ptr = fopen(file_name.c_str(), "r");
...
}