Programim dhe zhvillim, javascript, python, php, html

C++11 g++ me lista fillestare të mbyllura me kllapa

Unë jam i ri në programim, kështu që kërkoj falje nëse kjo është një pyetje e qartë, megjithatë kam probleme me sintaksën e paraqitur në një libër (Parimet e programimit dhe praktika duke përdorur C++ 2nd Edition nga krijuesi i C++, Bjarne Stroustrup). Në të, paraqitet si më poshtë për krijimin e një vektori të vargjeve:

vector<string> philosopher
    ={"Kant","Plato","Hume","Kierkegaard"};

Megjithatë, kur e kalon këtë përmes g++ nuk i pëlqen. Kodi im është si më poshtë:

#include "std_lib_facilities.h"  //The author's library for his examples

int main()
{
  vector<string>philosopher
    ={"Kant","Plato","Hume","Kierkegaard"};

}

Po marr një gabim gjatë përpilimit:

g++ vecttest.cpp -std=c++11
In file included from /usr/local/include/c++/4.9.0/ext/hash_map:60:0,
             from /usr/include/std_lib_facilities.h:34,
             from vecttest.cpp:1:
/usr/local/include/c++/4.9.0/backward/backward_warning.h:32:2: warning: #warning 
This file includes at least one deprecated or antiquated header which may 
be removed without further notice at a future date. Please use a 
non-deprecated interface with equivalent functionality instead. For a listing     
of replacement headers and interfaces, consult the file backward_warning.h. 
To disable this warning use -Wno-deprecated. [-Wcpp]
#warning \
^
In file included from /usr/local/include/c++/4.9.0/locale:41:0,
             from /usr/local/include/c++/4.9.0/iomanip:43,
             from /usr/include/std_lib_facilities.h:212,
             from vecttest.cpp:1:
/usr/local/include/c++/4.9.0/bits/locale_facets_nonio.h:1869:5: error: 
template-id  ‘do_get<>’ for 
‘String std::messages<char>::do_get(std::messages_base::catalog, int, int, 
const String&) const’ does not match any template declaration
 messages<char>::do_get(catalog, int, int, const string&) const;
 ^
/usr/local/include/c++/4.9.0/bits/locale_facets_nonio.h:1869:62: note: 
saw 1 ‘template<>’, need 2 for specializing a member function template
 messages<char>::do_get(catalog, int, int, const string&) const;
                                                          ^
vecttest.cpp: In function ‘int main()’:
vecttest.cpp:8:42: error: could not convert ‘{"Kant", "Plato", 
"Hume","Kierkegaard"}’from ‘<brace-enclosed initializer list>’ to ‘Vector<String>’
 ={"Kant","Plato","Hume","Kierkegaard"};

Mendova se ndoshta versioni im i GCC ishte më i vjetër (i cili ishte në 4.7) kështu që e përditësova në 4.9:

g++ -v
Using built-in specs.
COLLECT_GCC=g++
COLLECT_LTO_WRAPPER=/usr/local/libexec/gcc/x86_64-unknown-linux-gnu/4.9.0/lto-wrapper
Target: x86_64-unknown-linux-gnu
Configured with: ../gcc-4.9.0/configure
Thread model: posix
gcc version 4.9.0 (GCC) 

Ndonjë ide se ku po gaboj?

Ju falënderoj shumë për ndihmën tuaj.

30.06.2014

  • ju merrni paralajmërim në lidhje me titujt e vjetëruar, provoni të përfshini <vector> dhe <string> në vend të tyre 01.07.2014
  • Jeni i sigurt që keni ngjitur kodin e duhur? Kodi juaj thotë vector<string> ndërsa mesazhi i gabimit thotë vector<String>. 01.07.2014
  • Thjesht hiqni kokën e misterit dhe përfshini ato që kërkohen. Dhe përdorni std:: aty ku është e përshtatshme. 01.07.2014
  • Makro hakimet e neveritshme godasin sërish... 01.07.2014
  • Ekziston një version më i ri i atij titulli për C++11 këtu që duket për të përpiluar. 01.07.2014

Përgjigjet:


1

Po gaboni me përdorimin e kësaj std_lib_facilities.h. Duke e parë në internet, ai tregon:

template< class T> struct Vector : public std::vector<T> {
    ...
};

// disgusting macro hack to get a range checked vector:
#define vector Vector

Fatkeqësisht, kësaj klase modeli të personalizuar Vector i mungojnë disa konstruktorë që std::vector i ka.

Përdor direkt std::vector dhe do të funksionojë. Mbështetet në GCC 4.4 dhe më të reja.

Shënim: për të përdorur std::vector, duhet të siguroheni që mos përdorni std_lib_facilities.h fare, ose përdorni #undef vector. Përkufizimet makro janë problematike dhe nuk i kushtojnë vëmendje hapësirave të emrave, kështu që std::vector do të bëhej std::Vector joekzistente.

Shënim 2: T.C. me të drejtë komenton se çështje të ngjashme ekzistojnë edhe për string: përdorni std::string në vend.

30.06.2014
  • Ekziston gjithashtu një #define string String në atë kokë që shkaktoi gabimin e përpilimit <iomanip>. Kohë argëtuese... 01.07.2014
  • @T.C. Faleminderit, shtoi një shënim për këtë. 01.07.2014
  • @user3789175 Ai ofron një version të ri për C++11 këtu që duket të përpiloni me kodin tuaj. Ai i lidhur në këtë përgjigje (dhe keni përdorur) është për botimin e parë, i cili përdor C++98. 01.07.2014
  • Ke të drejtë, ky ishte çështja. Ende nuk më pëlqen të përdor një bibliotekë jo standarde, madje edhe për të mësuar, por tani për tani po i besoj librit në të. Përditësova skedarin e bibliotekës dhe gjërat janë mirë tani. Faleminderit per ndihmen tuaj. 01.07.2014
  • Materiale të reja

    Masterclass Coroutines: Kapitulli-3: Anulimi i korutinave dhe trajtimi i përjashtimeve.
    Mirë se vini në udhëzuesin gjithëpërfshirës mbi Kotlin Coroutines! Në këtë seri artikujsh, unë do t'ju çoj në një udhëtim magjepsës, duke filluar nga bazat dhe gradualisht duke u thelluar në..

    Faketojeni derisa ta arrini me të dhënat false
    A e gjeni ndonjëherë veten duke ndërtuar një aplikacion të ri dhe keni nevojë për të dhëna testimi që duken dhe duken më realiste ose një grup i madh të dhënash për performancën e ngarkesës...

    Si të përdorni kërkesën API në Python
    Kërkesë API në GitHub për të marrë depot e përdoruesve duke përdorur Python. Në këtë artikull, unë shpjegoj procesin hap pas hapi për të trajtuar një kërkesë API për të marrë të dhëna nga..

    Një udhëzues hap pas hapi për të zotëruar React
    Në këtë artikull, do të mësoni se si të krijoni aplikacionin React, do të mësoni se si funksionon React dhe konceptet thelbësore që duhet të dini për të ndërtuar aplikacione React. Learning..

    AI dhe Psikologjia — Pjesa 2
    Në pjesën 2 të serisë sonë të AI dhe Psikologji ne diskutojmë se si makineritë mbledhin dhe përpunojnë të dhëna për të mësuar emocione dhe ndjenja të ndryshme në mendjen e njeriut, duke ndihmuar..

    Esencialet e punës ditore të kodit tim VS
    Shtesat e mia të preferuara - Git Graph 💹 Kjo shtesë është vërtet e mahnitshme, e përdor përpara se të filloj të punoj për të kontrolluar dy herë ndryshimet dhe degët më të fundit, mund të..

    Pse Python? Zbulimi i fuqisë së gjithanshme të një gjiganti programues
    Në peizazhin gjithnjë në zhvillim të gjuhëve të programimit, Python është shfaqur si një forcë dominuese. Rritja e tij meteorike nuk është rastësi. Joshja e Python qëndron në thjeshtësinë,..