私のコードは、コードは私にではなく、私のコンパイラに大丈夫に見えるこのここでtypeof()を正しく使用していませんか?
#define tr(c,i) for(typeof((c).begin() i = (c).begin(); i != (c).end(); i++)
...
typedef vector<long> vl;
vl numbers;
...
tr(numbers, j) { // this is line 95
...
}
のように見えます!無謀にも、私は次のエラーを受け取りました:
code.cpp: In function ‘int main()’:
code.cpp:95:9: error: specialization of ‘std::vector::iterator’ after instantiation
code.cpp:95:9: error: expected primary-expression before ‘typeof’
code.cpp:95:9: error: expected ‘;’ before ‘typeof’
code.cpp:95:9: error: name lookup of ‘j’ changed for ISO ‘for’ scoping
code.cpp:95:9: note: (if you use ‘-fpermissive’ G++ will accept your code)
code.cpp:95:9: error: no match for ‘operator!=’ in ‘j != numbers.std::vector<_Tp, _Alloc>::end with _Tp = long int, _Alloc = std::allocator, std::vector<_Tp, _Alloc>::iterator = __gnu_cxx::__normal_iterator >, typename std::_Vector_base<_Tp, _Alloc>::_Tp_alloc_type::pointer = long int*’
私はここで何が欠けていますか?
これは、すべての地獄のように悪です。 – Puppy
@DeadMG、私はマクロに対する一般的な感情を理解しています。しかし、この場合の実際の問題は何ですか? 'c'が複数回評価されるという事実に関連するリスクとは別に、そして 'typeof'の非移植性。 –
typeofキーワードは何ですか?最初に見て.. – codekiddy