C ++でのgetline() - _GNU_SOURCEが必要ではありませんか?
質問
まず、私はC ++にはかなり新しいです。私はgetline()
は、標準C関数ではないので、#define _GNU_SOURCE
はそれを使用するために必要であることを信じています。私は今_GNU_SOURCE
がすでに定義されていることを私に語っ++ C ++およびグラムを使用しています:
$ g++ -Wall -Werror parser.cpp
parser.cpp:1:1: error: "_GNU_SOURCE" redefined
<command-line>: error: this is the location of the previous definition
誰もが、これは標準であり、またはその定義は、私の設定のどこかに隠されているかどうかを確認することはできますか?私が引用され、最終的なラインの意味のわからない。
ファイルの含まれます。
?次のようにしているので、おそらくそれは、これらの一つ以上に定義されています#include <iostream>
#include <string>
#include <cctype>
#include <cstdlib>
#include <list>
#include <sstream>
ありがとうございます。
解決
私は自動的_GNU_SOURCE
を定義し、バージョン3から、G ++と思います。これは、最初の定義は、(目の前で進-D_GNU_SOURCE
付き)、コマンドライン上で行われたことを示すエラーでサードラインでサポートされています:
<command-line>: error: this is the location of the previous definition
あなたはそれをしたくない場合は、、あなたのコンパイル単位の最初の行としてそれを#undef
。あなたは、しかし、それを必要とする場合があり、その場合の使用:
#ifndef _GNU_SOURCE
#define _GNU_SOURCE
#endif
あなたはそれを再定義しているので、あなたがエラーを取得している理由があります。あなたはそれが既に何だったかにそれを定義した場合にはエラーではありません。少なくとも、それがCの場合ですが、それはC ++と異なる場合があります。 GNUヘッダーに基づいて、私は、彼らはそれはあなたがが何か他にのそれを再定義していると考えている理由暗黙の-D_GNU_SOURCE=1
をやっていると言うでしょう。
次のコードは、あなたがそれを変更していない提供し、あなたにその値を教えてくださいます。
#define DBG(x) printf ("_GNU_SOURCE = [" #x "]\n")
DBG(_GNU_SOURCE); // first line in main.
他のヒント
私はいつもC ++で、次のいずれかを使用しなければなりませんでした。前_GNU_何かを宣言しなければならなかったことはありません。私は通常、同様++はgccを使用して、グラムので、私は通常の* nixの中に実行します。
string s = cin.getline()
char c;
cin.getchar(&c);
のgetlineは、2つの方法で定義されている標準です。
あなたは次のように流れの1つのメンバ関数として呼び出すことができます。
これは、
//the first parameter is the cstring to accept the data
//the second parameter is the maximum number of characters to read
//(including the terminating null character)
//the final parameter is an optional delimeter character that is by default '\n'
char buffer[100];
std::cin.getline(buffer, 100, '\n');
か、
で定義されたバージョンを使用することができます//the first parameter is the stream to retrieve the data from
//the second parameter is the string to accept the data
//the third parameter is the delimeter character that is by default set to '\n'
std::string buffer;
std::getline(std::cin, buffer,'\n');
さらなる参照のために http://www.cplusplus.com/reference/iostream/istream/getline。 HTML の http://www.cplusplus.com/reference/string/getline.html