7

そのため、最近、マップとベクトルの使用を発見しましたが、文字列を含むベクトルをループする方法を見つけようとするのに苦労しています。

これが私が試したことです:

#include <string>
#include <vector>
#include <stdio>

using namespace std;

void main() {
    vector<string> data={"Hello World!","Goodbye World!"};

    for (vector<string>::iterator t=data.begin(); t!=data.end(); ++t) {
        cout<<*t<<endl;
    }
}

コンパイルしようとすると、次のエラーが発生します。

cd C:\Users\Jason\Desktop\EXB\Win32
wmake -f C:\Users\Jason\Desktop\EXB\Win32\exbint.mk -h -e
wpp386 ..\Source\exbint.cpp -i="C:\WATCOM/h;C:\WATCOM/h/nt" -w4 -e25 -zq -od    -d2 -6r -bt=nt -fo=.obj -mf -xs -xr
..\Source\exbint.cpp(59): Error! E157: col(21) left expression must be integral
..\Source\exbint.cpp(59): Note! N717: col(21) left operand type is 'std::ostream watcall (lvalue)'
..\Source\exbint.cpp(59): Note! N718: col(21) right operand type is 'std::basic_string<char,std::char_traits<char>,std::allocator<char>> (lvalue)'
Error(E42): Last command making (C:\Users\Jason\Desktop\EXB\Win32\exbint.obj) returned a bad status
Error(E02): Make execution terminated
Execution complete

map を使用して同じ方法を試しましたが、うまくいきました。唯一の違いは、cout 行を次のように変更したことです。

cout<<t->first<<" => "<<t->last<<endl;
4

5 に答える 5

-2

私は自分の問題の解決策を見つけました。c_str を使用する代わりに std::string を使用し、Open Watcom の代わりに G++ コンパイラを使用するように切り替えました。

代わりに:

char *someString="Blah blah blah";

代わりに次のものに置き換えました:

string someString="Blah blah blah";

この方法ははるかに効率的で簡単です。

于 2016-10-26T01:26:36.013 に答える