2017-03-24 2 views
2

Windows上でアプリケーションのバナーを作成しようとしています。C++複数行の文字列が期待通りに機能しない

// C Libraries: 
#include <string> 
#include <iostream> 
#include <algorithm> 

// Namespaces: 
using namespace std; 

const char *BANNER[] = R"BANNER(
      .-') _        .-') 
      ( OO))       (OO). 
,--. ,--./ '._ ,-.-') ,--.  ,-.-') (_)---\_) 
| | | | |'--...__)| |OO) | |.-') | |OO)/ _ | 
| | | .-')'--. .--'| | \ | | OO) | | \\ :` `. 
| |_|(OO) | | | |(_/ | |`-' | | |(_/ '..`''.) 
| | | `-'/| | ,| |_.'(| '---.',| |_.'.-._) \ 
(' '-'(_.-' | | (_| | |  |(_| | \  /
`-----'  `--' `--' `------' `--' `-----')BANNER"; 

char* getCmdOption(char ** begin, char ** end, const std::string & option) 
{ 
    char ** itr = find(begin, end, option); 
    if (itr != end && ++itr != end) 
    { 
     return *itr; 
    } 
    return 0; 
} 

bool cmdOptionExists(char** begin, char** end, const std::string& option) 
{ 
    return find(begin, end, option) != end; 
} 

int main(int argc, char * argv[]) 
{ 
    printf("%s\n", BANNER); 

    if(cmdOptionExists(argv, argv+argc, "-h")) 
    { 
     cout << "Help Menu"; 
    } 


    if (cmdOptionExists(argv, argv + argc, "-a")) 
    { 
     cout << "Adobe"; 
    } 

    return 0; 
} 

私はあなたが複数行の文字列を作成するには、構文R"(<string here>)";またはR"BANNER(<string here>)BANNER";を使用することができ、複数のスレッドや複数のWebサイト上で読みました。私はこのコードをコンパイルするようになったとき、しかし、私は、次のエラーを取得:

utilis.cpp(9) : error C2001: newline in constant 
utilis.cpp(9) : error C2065: 'R' : undeclared identifier 
utilis.cpp(9) : error C2143: syntax error : missing ';' before 'string' 
utilis.cpp(9) : error C2059: syntax error : 'string' 
utilis.cpp(10) : error C2015: too many characters in constant 
utilis.cpp(10) : error C2059: syntax error : ')' 
utilis.cpp(11) : error C2059: syntax error : ')' 
utilis.cpp(12) : error C2015: too many characters in constant 
utilis.cpp(12) : error C2059: syntax error : ')' 
utilis.cpp(12) : warning C4129: '_' : unrecognized character escape sequence 
utilis.cpp(12) : error C2001: newline in constant 
utilis.cpp(12) : error C2015: too many characters in constant 
utilis.cpp(13) : error C2015: too many characters in constant 
utilis.cpp(13) : error C2059: syntax error : ')' 
utilis.cpp(13) : error C2059: syntax error : ')' 
utilis.cpp(14) : warning C4129: ' ' : unrecognized character escape sequence 
utilis.cpp(14) : error C2001: newline in constant 
utilis.cpp(14) : error C2015: too many characters in constant 
utilis.cpp(15) : error C2018: unknown character '0x60' 
utilis.cpp(15) : error C2015: too many characters in constant 
utilis.cpp(15) : error C2018: unknown character '0x60' 
utilis.cpp(15) : error C2137: empty character constant 
utilis.cpp(16) : error C2018: unknown character '0x60' 
utilis.cpp(16) : error C2015: too many characters in constant 
utilis.cpp(17) : error C2015: too many characters in constant 
utilis.cpp(17) : warning C4129: ' ' : unrecognized character escape sequence 
utilis.cpp(17) : error C2001: newline in constant 
utilis.cpp(17) : error C2015: too many characters in constant 
utilis.cpp(18) : error C2018: unknown character '0x60' 
utilis.cpp(18) : error C2015: too many characters in constant 
utilis.cpp(18) : error C2018: unknown character '0x60' 
utilis.cpp(18) : error C2015: too many characters in constant 
utilis.cpp(18) : error C2018: unknown character '0x60' 
utilis.cpp(18) : error C2015: too many characters in constant 
utilis.cpp(18) : error C2001: newline in constant 
utilis.cpp(21) : error C2143: syntax error : missing ')' before '{' 
utilis.cpp(21) : error C2143: syntax error : missing ';' before '{' 
utilis.cpp(21) : error C2447: '{' : missing function header (old-style formal list?) 

私は、複数行の文字列を作成することはできませんポイントに間違って何をしているのですか?

私も試したことがあります:cout << BANNERと同じ出力を得る。私にとってはto many characters in constantエラーは意味がありません。なぜなら私は大きな鉱山を見たことがあります。例えば、hereを参照してください。

+0

このスレッドまたは複数のWebサイトの少なくとも1つにリンクを張ることができますか。私はこれまでにこれについて聞いたことがありません – user463035818

+0

これは生の文字列です –

+0

C++の型を使用すると、なぜstd :: stringを使用しませんか? – Papipone

答えて

3

問題あなたは[]

const char *BANNER[] = R"BANNER(

を入れてはC++ 11以降を使用し、また

const char *BANNER = R"BANNER(

でなければなりません。 -std=c++11でg ++で動作します。

+0

同じですコンパイル時に同じエラーが発生します。 – jakehimton

+1

@jakehimton -std = C++ 11をコンパイラフラグに追加しましたか? – Bl4ckb0ne

+0

@ Bl4ckb0ne私は 'cl'コンパイラを使っていますが、それは違いがありますか? – jakehimton

関連する問題