私はビャーネ・ストロヴストルップのC++プログラミング言語第4版では例を試してみました:Cで、この例で何が間違っている++ビャーネ・ストロヴストルップの書籍
#include <iostream>
#include <string>
#include <vector>
#include <list>
using namespace std;
template<typename T>
using Iterator<T> = typename T::iterator;
template<typename C, typename V>
vector<Iterator<C>> find_all(C& c, V v)
{
vector<Iterator<C>> res;
for (auto p = c.begin(); p!=c.end(); ++p)
if (*p==v)
res.push_back(p);
return res;
}
void test()
{
string m {"Mary had a little lamb"};
for (auto p : find_all(m,'a'))
if (*p!='a')
cerr << "string bug!\n";
// p is a str ing::iterator
list<double> ld {1.1, 2.2, 3.3, 1.1};
for (auto p : find_all(ld,1.1))
if (*p!=1.1)
cerr << "list bug!\n";
vector<string> vs { "red", "blue", "green", "green", "orange", "green" };
for (auto p : find_all(vs,"green"))
if (*p!="green")
cerr << "vector bug!\n";
for (auto p : find_all(vs,"green"))
*p = "ver t";
}
int main()
{
test();
return 0;
}
§4.5.1
私はとのコードをコンパイル: G ++ます。test.cpp -oテスト-g -std = C Ubuntuの上++ 11、私は以下のエラーを得た:だから問題は何である
iterator_of_iterator_version_2.cpp:9:15: error: expected ‘=’ before ‘<’ token
using Iterator<T> = typename T::iterator;
^
iterator_of_iterator_version_2.cpp:9:15: error: expected type-specifier before ‘<’ token
iterator_of_iterator_version_2.cpp:12:8: error: ‘Iterator’ was not declared in this scope
vector<Iterator<C>> find_all(C& c, V v)
^
iterator_of_iterator_version_2.cpp:12:17: error: template argument 1 is invalid
vector<Iterator<C>> find_all(C& c, V v)
^
iterator_of_iterator_version_2.cpp:12:17: error: template argument 2 is invalid
iterator_of_iterator_version_2.cpp:12:18: error: expected unqualified-id before ‘>’ token
vector<Iterator<C>> find_all(C& c, V v)
^
iterator_of_iterator_version_2.cpp: In function ‘void test()’:
iterator_of_iterator_version_2.cpp:24:30: error: ‘find_all’ was not declared in this scope
for (auto p : find_all(m,'a'))
^
iterator_of_iterator_version_2.cpp:29:31: error: ‘find_all’ was not declared in this scope
for (auto p : find_all(ld,1.1))
^
iterator_of_iterator_version_2.cpp:33:35: error: ‘find_all’ was not declared in this scope
for (auto p : find_all(vs,"green"))
^
iterator_of_iterator_version_2.cpp:36:35: error: ‘find_all’ was not declared in this scope
for (auto p : find_all(vs,"green"))
^
を?
私はちょうど本の例のコピー貼り付けを行ったので、このコードでは構文エラーは見つからないようです。
@Someprogrammerdudeにこの
、同じエラー – SWIIWII
@Someprogrammerdude gccのバージョン5.4.0 20160609(Ubuntuの〜16.04.4 5.4.0-6ubuntu1) – SWIIWII
Iterator = typename T :: iterator 'を使用しているテンプレートでなければなりません –