私は私を混乱させることにいくつかの問題があります。std::vector
独自のクラスを含むa を typedef しました。
typedef std::vector<data::WayPoint> TWayPointList;
DataHandler
これは、一部の名前空間に抵抗する構造内のネストされた型data
です。
そこで、ベクトルの単一の内容を出力したいと思います。このために、私の考えは、<< 演算子をオーバーロードし、typedef されたベクトルの単一要素をループすることでした。そこで、構造体内で次の出力演算子を宣言しましたDataHandler
。
namespace data
{
structure DataHandler
{
// ... some code
typedef std::vector<data::WayPoint> TWayPointList;
// ... some more code
/**
* @brief Globally overloaded output operator
*
* @param[in] arOutputStream Reference to output stream.
* @param[in] arWayPointList WayPoint which should be printed to output stream.
*/
LIB_EXPORTS friend std::ostream& operator<<(std::ostream& arOutputStream, const data::DataHandler::TWayPointList& arWayPointList);
} // structure DataHandler
} // namespace data
そして、それぞれのソースファイルでそれを定義しました:
namespace data
{
std::ostream& operator<<(std::ostream& arOutputStream, const DataHandler::TWayPointList& arWayPointList)
{
for(DataHandler::TWayPointList::const_iterator lIterator = arWayPointList.begin(); lIterator < arWayPointList.end(); ++lIterator)
{
arOutputStream << *lIterator << std::endl;
}
return arOutputStream;
}
} // namespace data
これはうまくコンパイルされます。しかし、私がこのようなものを追加すると
int main(int argc, char *argv[])
{
// create Waypoint
data::WayPoint lWayPoint;
// create waypoint list
data::DataHandler::TWayPointList lWayPointList;
// append two elements
lWayPointList.push_back(lWayPoint);
lWayPointList.push_back(lWayPoint);
std::cout << lWayPointList << std::endl;
return 0;
}
私のtestmain.cpp
では、コンパイラは正しいものを見つけることができなかったと述べていますoperator<<
(そして、他のクラスで定義された私自身のいくつかを含む、見つけた多くの仮定を行います)。このようないくつかのエラー
src/main.cpp:107: error: no match for 'operator<<' in 'std::cout << lWayPointList'
src/main.cpp:107:18: note: candidates are:
... a long list of canditates...
ADLと関係があると思いますが、要点がわかりませんでした。
では、コードを機能させるためのアイデアやアドバイスはありますか?
[編集] 明確にするために、ソース コードとエラー出力にいくつかのファイルを追加しました。