2017-03-24 1 views
2

J'essaye de créer une bannière pour une application sur Windows.La chaîne multi-lignes C++ ne fonctionne pas comme prévu

// 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; 
} 

J'ai lu sur plusieurs threads et plusieurs sites Web que vous pouvez utiliser la syntaxe R"(<string here>)"; ou R"BANNER(<string here>)BANNER"; pour créer une chaîne de plusieurs lignes. Cependant, quand je suis arrivé à compiler ce code, je reçois les erreurs suivantes:

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?) 

Qu'est-ce que je fais mal au point où je ne peux pas créer une chaîne multi-ligne?

J'ai également essayé: cout << BANNER et obtenir la même sortie. Pour moi l'erreur to many characters in constant n'a pas de sens, puisque j'ai vu des bannières plus grandes que la mienne, par exemple voir here.

+0

pouvez-vous donner un lien vers au moins un de ces fils de discussion ou plusieurs sites Web. Je n'en ai jamais entendu parler auparavant – user463035818

+0

C'est une chaîne brute –

+0

Utilisez les types C++, pourquoi n'utilisez-vous pas std :: string? – Papipone

Répondre

3

Le problème est que vous mettez []

const char *BANNER[] = R"BANNER(

devrait être

const char *BANNER = R"BANNER(

De plus, utilisez C++ 11 ou plus. Fonctionne pour moi avec g ++ avec -std=c++11.

+0

problème, lors de la compilation, je reçois la même erreur. – jakehimton

+1

@jakehimton avez-vous ajouté -std = C++ 11 à vos drapeaux de compilation? – Bl4ckb0ne

+0

@ Bl4ckb0ne J'utilise un compilateur 'cl', cela ferait-il une différence? – jakehimton