申し訳ありませんが、私の質問に対してより適切なタイトルが見つかりませんでした。基本的に私が気づいたのは、次のコンパイルがうまくいったことです:
#include <vector>
void foo();
int main () {
foo();
return 0;
}
namespace{
struct point {
double x, y;
};
}
void foo(){
std::vector<point> p;
}
一方、コンパイラは次のことについて不平を言います。
#include <vector>
void foo();
int main () {
foo();
return 0;
}
void foo(){
struct point {
double x, y;
};
std::vector<point> p;
}
// g++ output:
a.cpp: In function ‘void foo()’:
a.cpp:14: error: template argument for ‘template<class _Tp> class std::allocator’ uses local type ‘foo()::point’
a.cpp:14: error: trying to instantiate ‘template<class _Tp> class std::allocator’
a.cpp:14: error: template argument 2 is invalid
a.cpp:14: error: invalid type in declaration before ‘;’ token
2番目のアプローチの何が問題なのか知りたいですか? 新しいオブジェクトstruct point
を作成する時点で完全に定義されていませんか?std::vector<point>