Unicode字符问题/转换参数

时间:2019-02-02 20:27:35

标签: c++

这是不言自明的,但无法正确解决。 这是我的代码。 我需要使用模板才能处理多个文件,写入/读取文件并进行操作。

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 *”

我不知道如何使它工作。 预先感谢。

1 个答案:

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