2017-03-21 2 views
0

C++で次のコードを記述しました。関数 "change_list"の宣言でエラーが発生します。 "不完全な型は許可されていません" "識別子"リストは "未定義"です。なぜなのかご存知ですか?問題はmylistPoint*を期待するのに対し、あなたは整数を渡しているの文mylist.push_back(4)、あるC++ pass list as a parameter to a functionC++ STLリストを関数に渡す方法

#include <iostream> 
#include <list> 

typedef struct Point { 
    int x; 
    int y; 
} Point; 

Point* initPoint(int x, int y) { 
    Point* pt = (Point*)malloc(sizeof(Point)); 
    pt->x = x; 
    pt->y = y; 
    return pt; 
} 

void change_list(list<Point*> &mylist){ // ERROR!!! 
    mylist.push_back(4); 
} 

int main() 
{ 
    using namespace std; 
    list<Point*> c1; // initiating a list 
    c1.push_back(initPoint(1, 1)); 
    c1.push_back(initPoint(2, 2)); 
    c1.push_back(initPoint(3, 3)); 

    change_list(c1); 

    for (Point* c : c1) 
     cout << " " << c->x; 
    cout << "\n"; 

    return 0; 

} 
+3

'のstd :: list'を試してみてください。 – songyuanyao

+0

'Point * pt =(Point *)malloc(sizeof(Point));'は危険な場所と間違った場所の間にあります。なぜC++の代わりにCスタイルの割り当てを使用しますか? (割り当てられたメモリを決して解放しないので、メモリリークもあります) – UnholySheep

+0

@songyuanyao、ありがとう。答えとして書いてください、私は受け入れます。 – CrazySynthax

答えて

2

: は、私はこの記事で回答を行いました。 mylist.push_back(new Point())のように呼び出すと、コンパイルされます。ところで、std::listと書くか、#include<list>の後にどこかにusing std::listと書いてください。

1

あなたのコード内の二つの問題があります

  1. はあなたが世界的にSTDを使用します(悪い習慣)またはSTD ::リストを使用するか、メインで名前空間stdを使用していました。
  2. 関数change_listで、有効なポイントタイプのポインタをプッシュすると、整数がプッシュされます。

    void change_list(std::list<Point*> &mylist){ // ERROR!!! 
         mylist.push_back(initPoint(8, 8)); 
        } 
    
関連する問題