typedef Syntax Error

Discussion in 'C++' started by Mike Copeland, Oct 31, 2008.

  1. I'm getting a syntax error on the "typedef" code line here. Any
    thoughts on why? TIA


    struct CSTYPE
    { // City/State Record
    string csKey; // City/State "Key"
    string csCity; // City
    string csState; // State Code
    };
    typedef map<string, CSTYPE> CSINFO; // <=== error here
    extern CSINFO cityStInfo;
    extern map<string, CSTYPE>::iterator csIter;
    extern CSTYPE workCS;
     
    Mike Copeland, Oct 31, 2008
    #1
    1. Advertising

  2. Mike Copeland

    red floyd Guest

    On Oct 31, 2:01 pm, (Mike Copeland) wrote:
    >    I'm getting a syntax error on the "typedef" code line here.  Any
    > thoughts on why?  TIA
    >
    > struct CSTYPE
    > {                                              // City/State Record
    >         string csKey;                            // City/State "Key"
    >         string csCity;                                       // City
    >         string csState;                                // State Code};
    >
    > typedef map<string, CSTYPE> CSINFO;  // <=== error here
    >         extern CSINFO cityStInfo;
    >         extern map<string, CSTYPE>::iterator csIter;
    >         extern CSTYPE workCS;



    1. did you #include <map> and <string>?
    2. map and string live in the std:: namespace
    3. Would you care to describe the specific error?
     
    red floyd, Oct 31, 2008
    #2
    1. Advertising

  3. > >> I'm getting a syntax error on the "typedef" code line here. Any
    > >> thoughts on why? TIA
    > >>
    > >> struct CSTYPE
    > >> { // City/State Record
    > >> string csKey; // City/State "Key"
    > >> string csCity; // City
    > >> string csState; // State Code
    > >> }; <==== this was in my post, but was appended to the above line.
    > >>
    > >> typedef map<string, CSTYPE> CSINFO; // <=== error here
    > >> extern CSINFO cityStInfo;
    > >> extern map<string, CSTYPE>::iterator csIter;
    > >> extern CSTYPE workCS;

    > >
    > >
    > > 1. did you #include <map> and <string>?
    > > 2. map and string live in the std:: namespace
    > > 3. Would you care to describe the specific error?

    >
    > It's possible that his compiler does not allow the use of incomplete
    > types as template arguments, even in typedefs, and 'CSTYPE' is
    > incomplete at that point...


    Yes, but please see my common above. I _thought_ I had a complete
    declaration for CSTYPE - am I wrong?
     
    Mike Copeland, Oct 31, 2008
    #3
  4. > > I'm getting a syntax error on the "typedef" code line here. Any
    > > thoughts on why? TIA
    > >
    > > struct CSTYPE // City/State Record
    > > {
    > > string csKey;// City/State "Key"
    > > string csCity; // City
    > > string csState; // State Code
    > > };
    > > typedef map<string, CSTYPE> CSINFO; // <= error here
    > > extern CSINFO cityStInfo;
    > > extern map<string, CSTYPE>::iterator csIter;
    > > extern CSTYPE workCS;

    >
    >
    > 1. did you #include <map> and <string>?
    > 2. map and string live in the std:: namespace
    > 3. Would you care to describe the specific error?


    I didn't state the error (C2143) because it's compiler-specififc
    (VC++ 6.0) and I know that's a no-no here. 8<{{
    I also didn't state that this is in a common .h file I'm building
    (and I apologize for not mentioning that...)
     
    Mike Copeland, Oct 31, 2008
    #4
  5. Mike Copeland

    James Kanze Guest

    On Oct 31, 10:16 pm, Victor Bazarov <>
    wrote:
    > red floyd wrote:
    > > On Oct 31, 2:01 pm, (Mike Copeland) wrote:
    > >> I'm getting a syntax error on the "typedef" code line here.
    > >>  Any thoughts on why?  TIA


    > >> struct CSTYPE
    > >> {                                              // City/State Record
    > >>         string csKey;                            // City/State "Key"
    > >>         string csCity;                                       // City
    > >>         string csState;                                // State Code};


    > >> typedef map<string, CSTYPE> CSINFO;  // <=== error here
    > >>         extern CSINFO cityStInfo;
    > >>         extern map<string, CSTYPE>::iterator csIter;
    > >>         extern CSTYPE workCS;


    > > 1.  did you #include <map> and <string>?
    > > 2.  map and string live in the std:: namespace
    > > 3.  Would you care to describe the specific error?


    > It's possible that his compiler does not allow the use of
    > incomplete types as template arguments, even in typedefs, and
    > 'CSTYPE' is incomplete at that point...


    That wasn't the case in his original code. If you'll look at
    the end of the line "string csState;", you'll see the closing
    brace of CSTYPE. For some reasons, something in the news very
    often seems to move a line with just a }: to the end of the
    preceding line. (I've always suspected Google, because that's
    what I use to read news, and I'm constantly seeing this.)

    Without the closing brace, of course, the code would be illegal.
    Because of the incomplete type, but also because you're not
    allowed to use extern in a class either (and that error requires
    a dignostic).

    Like Mike, I rather suspect that he's either forgotten the
    include, and he's clearly fogotten the std::. Which means that
    string and map are unknown symbols. To reasonably parse C++,
    the compiler needs to know when a symbol names a type; use an
    unknown symbol where a type is required, the compiler will
    generally suppose it isn't a type (which results in a syntax
    error), and the quality of the error messages go downhill from
    there.

    --
    James Kanze (GABI Software) email:
    Conseils en informatique orientée objet/
    Beratung in objektorientierter Datenverarbeitung
    9 place Sémard, 78210 St.-Cyr-l'École, France, +33 (0)1 30 23 00 34
     
    James Kanze, Nov 1, 2008
    #5
  6. Mike Copeland

    James Kanze Guest

    On Oct 31, 10:43 pm, (Mike Copeland) wrote:
    > > >>    I'm getting a syntax error on the "typedef" code line here.  Any
    > > >> thoughts on why?  TIA


    > > >> struct CSTYPE
    > > >> {                                              // City/State Record
    > > >>         string csKey;                            // City/State "Key"
    > > >>         string csCity;                                       // City
    > > >>         string csState;                                // State Code
    > > >> };  <==== this was in my post, but was appended to the above line.


    > > It's possible that his compiler does not allow the use of
    > > incomplete types as template arguments, even in typedefs,
    > > and 'CSTYPE' is incomplete at that point...


    > Yes, but please see my common above.  I _thought_ I had a
    > complete declaration for CSTYPE - am I wrong?


    You did. Your original posting was correct in this regard, but
    something in the net seems to occasionally (often, in fact) join
    a line with just a "}" or a "};" with the preceding line. If
    the preceding line doesn't end with a comment, it doesn't affect
    the legality of the code, but it is an unusual formatting. (I
    asked about this once, since I was seeing so many postings with
    this unusual formatting, and thought it might be some new coding
    convention I wasn't familiar with. The poster in question
    assured me that the }; was on a separate line when the posting
    left his machine.)

    --
    James Kanze (GABI Software) email:
    Conseils en informatique orientée objet/
    Beratung in objektorientierter Datenverarbeitung
    9 place Sémard, 78210 St.-Cyr-l'École, France, +33 (0)1 30 23 00 34
     
    James Kanze, Nov 1, 2008
    #6
  7. Mike Copeland

    Jim Langston Guest

    "Mike Copeland" <> wrote in message
    news:...
    >> > I'm getting a syntax error on the "typedef" code line here. Any
    >> > thoughts on why? TIA
    >> >
    >> > struct CSTYPE // City/State Record
    >> > {
    >> > string csKey;// City/State "Key"
    >> > string csCity; // City
    >> > string csState; // State Code
    >> > };
    >> > typedef map<string, CSTYPE> CSINFO; // <= error here
    >> > extern CSINFO cityStInfo;
    >> > extern map<string, CSTYPE>::iterator csIter;
    >> > extern CSTYPE workCS;

    >>
    >>
    >> 1. did you #include <map> and <string>?
    >> 2. map and string live in the std:: namespace
    >> 3. Would you care to describe the specific error?

    >
    > I didn't state the error (C2143) because it's compiler-specififc
    > (VC++ 6.0) and I know that's a no-no here. 8<{{


    There is no reason I know of to use VC++ 6.0 when you can download VC++ 8.0
    for free from Microsoft which is much better and up to date. See here.
    http://www.microsoft.com/express/download/

    > I also didn't state that this is in a common .h file I'm building
    > (and I apologize for not mentioning that...)
     
    Jim Langston, Nov 1, 2008
    #7
  8. Mike Copeland

    Bo Persson Guest

    Jim Langston wrote:
    > "Mike Copeland" <> wrote in message
    > news:...
    >>>> I'm getting a syntax error on the "typedef" code line here. Any
    >>>> thoughts on why? TIA
    >>>>
    >>>> struct CSTYPE // City/State Record
    >>>> {
    >>>> string csKey;// City/State "Key"
    >>>> string csCity; // City
    >>>> string csState; // State Code
    >>>> };
    >>>> typedef map<string, CSTYPE> CSINFO; // <= error here
    >>>> extern CSINFO cityStInfo;
    >>>> extern map<string, CSTYPE>::iterator csIter;
    >>>> extern CSTYPE workCS;
    >>>
    >>>
    >>> 1. did you #include <map> and <string>?
    >>> 2. map and string live in the std:: namespace
    >>> 3. Would you care to describe the specific error?

    >>
    >> I didn't state the error (C2143) because it's compiler-specififc
    >> (VC++ 6.0) and I know that's a no-no here. 8<{{

    >
    > There is no reason I know of to use VC++ 6.0 when you can download
    > VC++ 8.0 for free from Microsoft which is much better and up to
    > date. See here. http://www.microsoft.com/express/download/
    >


    That's VC9 even, telling us that VC6 is just ancient. Don't use it
    unless someone is pulling your toenails out!


    Bo Persson
     
    Bo Persson, Nov 1, 2008
    #8
  9. Mike Copeland

    red floyd Guest

    James Kanze wrote:

    > Like Mike, I rather suspect that he's either forgotten the
    > include, and he's clearly fogotten the std::.


    Just FYI, that was me, not Mike.
     
    red floyd, Nov 2, 2008
    #9
  10. In message <>, Mike Copeland
    <> writes
    >> > I'm getting a syntax error on the "typedef" code line here. Any
    >> > thoughts on why? TIA
    >> >
    >> > struct CSTYPE // City/State Record
    >> > {
    >> > string csKey;// City/State "Key"
    >> > string csCity; // City
    >> > string csState; // State Code
    >> > };
    >> > typedef map<string, CSTYPE> CSINFO; // <= error here
    >> > extern CSINFO cityStInfo;
    >> > extern map<string, CSTYPE>::iterator csIter;
    >> > extern CSTYPE workCS;

    >>
    >>
    >> 1. did you #include <map> and <string>?
    >> 2. map and string live in the std:: namespace
    >> 3. Would you care to describe the specific error?

    >
    > I didn't state the error (C2143) because it's compiler-specififc
    >(VC++ 6.0) and I know that's a no-no here. 8<{{


    But you could tell us the *text* of the message, which might shed some
    light. ;-)

    Another possibility that nobody has mentioned is that you're including
    some other header file which defines CSINFO or CSTYPE as a macro -
    because of this, it's often a good idea to avoid using all-caps
    identifiers for anything else.

    > I also didn't state that this is in a common .h file I'm building
    >(and I apologize for not mentioning that...)


    --
    Richard Herring
     
    Richard Herring, Nov 3, 2008
    #10
  11. > > I didn't state the error (C2143) because it's compiler-specififc
    > > (VC++ 6.0) and I know that's a no-no here. 8<{{

    >
    > There is no reason I know of to use VC++ 6.0 when you can download VC++ 8.0
    > for free from Microsoft which is much better and up to date. See here.
    > http://www.microsoft.com/express/download/


    Any way I try to get to this site, I get an error (Unable to load XML
    manifest...(etc.). Is this normal, or temporary? TIA
     
    Mike Copeland, Nov 4, 2008
    #11
    1. Advertising

Want to reply to this thread or ask your own question?

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. Balaji
    Replies:
    3
    Views:
    10,115
  2. Jess
    Replies:
    5
    Views:
    294
  3. oor
    Replies:
    0
    Views:
    1,356
  4. Good Night Moon
    Replies:
    9
    Views:
    283
    Rick DeNatale
    Jul 25, 2007
  5. Mark Richards
    Replies:
    3
    Views:
    316
    Tad McClellan
    Nov 18, 2007
Loading...

Share This Page