

vectorを用いた構造体を他クラスで値を変更したいとき、どのようにしたらよろしいでしょうか。  
下にコードの現状を書きます。

構造体

[code]

    class st{
        struct hoge{
            int score1;
            int score2;
            int sum;
        }
    }
    
    class data{
    public:
    　　　　vector<TestScore>* Data::GetData(){
        return  &_studentScore;
    　　　　}
    }
    
    class cal{
    public:
        int sumCal(vector<hoge>* sScore){
            sScore[i]->sum = sScore[i]->score1 + sScore[i]->score2;
        }
    }
    
[/code]

上記コードのsumCal関数で構造体のscore1,2にアロー演算子でアクセスしようとすると、  
式にはポインター型が必要ですと警告が出ます。  
->*ではscore1は存在しないとエラーになります。


CC BY-SA 3.0
2017-07-10T06:21:08.847
36243
2017-07-10T08:45:34.720
2017-07-10T07:25:28.717
24318
24318
question
c++
vectorを用いた構造体の参照渡し


質問タイトルには「参照」とありますが提示ソースコードは参照になっていないわけです。その辺で「参照」と「ポインタ」と「実体」の関係で混乱してしまっているようです。

提示ソースは関数 `sumCal` にて「 `vector` へのポインタ」を使っていますがたぶんこれが誤りで、本当にやりたいのは「 `vector`
への参照」なのだろうと推測します。すると関数宣言は

[code]

    int sumCal(vector<hoge>& sScore)
    
[/code]

でなければなりません。そして `vector<hoge>` に格納されるのは `hoge` の値そのものなので、関数の中で `score1`
などにアクセスするには `->` ではなくて `.` になります。結果

[code]

    int sumCal(vector<hoge>& sScore) {
        sScore[i].sum = sScore[i].score1 + sScore[i].score2;
    }
    
[/code]

が書きたかったコードなのではないかな・・・と推測しました。

`i` がどこから来たのかとか `sumCal`
の返却値が無いとかいろいろツッコミどころはありますが、その辺は本題から外れそうなのであえてスルーということで。


CC BY-SA 3.0
2017-07-10T08:45:34.720
36245
2017-07-10T08:45:34.720
8589
36243
answer