0
#include <iostream>
#include <string>
string &parse(string str,int from){
   string *data=new string[6];
    ....
    ....
   return *data;
}


int main(){
string data[6];
data=parse(str,18); //ERR: std::string must be a modifiable lvalue
}

上記のエラーが発生しました。operator= を作成しようと考えていますが、正しいですか? もしそうなら、私はこれを試しました

string operator=(const string& other){} //ERR: operator= must be a member function

しかし、別のエラーが発生します。助けてくれてありがとう。

4

3 に答える 3

2

parse()への参照を返すstd::stringため、文字列のローカル配列を逆参照すると、配列の最初の文字列への参照が返されます。
そのmain()参照を文字列の配列に割り当てていますが、これはまったく意味がありません。
あなたがやろうとしていることを達成するための最良のオプションは、使用することですstd::vector:

std::vector<std::string> parse()
{
    std::vector<std::string> v(6);

    ...

    return v;
}

int main()
{
    std::vector<std::string> data;

    data = parse();
}

ベクトルは値で返されますが、ベクトルはコピーする代わりに簡単に移動できるため、パフォーマンスの問題はありません。

使用できない場合std::vector(たとえば、動的配列を学習して理解しようとしているために)、最初に割り当てた動的配列へのポインターを返すことができますparse()

std::string* parse()
{
    std::string* strs = new std::string[6];

    ...

    return strs;
}

int main()
{
    std::string* data;

    data = parse();

    ...

    delete[] data; //Don't forget to release the array memory!
}
于 2013-09-01T20:48:15.990 に答える