typedef Syntax Error

Collapse
This topic is closed.
X
X
 
  • Time
  • Show
Clear All
new posts
  • Mike Copeland

    typedef Syntax Error

    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, CSTYPECSINFO; // <=== error here
    extern CSINFO cityStInfo;
    extern map<string, CSTYPE>::iterat or csIter;
    extern CSTYPE workCS;

  • red floyd

    #2
    Re: typedef Syntax Error

    On Oct 31, 2:01 pm, mrc2...@cox.net (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, CSTYPECSINFO;  // <=== error here
            extern CSINFO cityStInfo;
            extern map<string, CSTYPE>::iterat or csIter;
            extern CSTYPE workCS;

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

    Comment

    • Victor Bazarov

      #3
      Re: typedef Syntax Error

      red floyd wrote:
      On Oct 31, 2:01 pm, mrc2...@cox.net (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, CSTYPECSINFO; // <=== error here
      > extern CSINFO cityStInfo;
      > extern map<string, CSTYPE>::iterat or csIter;
      > extern CSTYPE workCS;
      >
      >
      1. did you #include <mapand <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...

      V
      --
      Please remove capital 'A's when replying by e-mail
      I do not respond to top-posted replies, please don't ask

      Comment

      • Jeff Schwab

        #4
        Re: typedef Syntax Error

        Mike Copeland wrote:
        I'm getting a syntax error on the "typedef" code line here.
        ....

        The following appears to work as expected w/GCC 4.

        #include <map>
        #include <string>

        using std::map;
        using std::string;

        // TODO: Expand "cs" to something more meaningful.
        namespace cs {

        // TODO: Give this type a more meaningful name.
        struct type {
        string key;
        string city;
        string state;
        };

        typedef map<string, typeinfo;
        }

        #include <iostream>

        int main() {

        cs::info info;

        info["hello"].key = "world";
        info["foo"].key = "bar";

        std::cout << info["hello"].key << '\n';
        std::cout << info["foo"].key << '\n';
        }

        Comment

        • Mike Copeland

          #5
          Re: typedef Syntax Error

          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, CSTYPECSINFO; // <=== error here
          extern CSINFO cityStInfo;
          extern map<string, CSTYPE>::iterat or csIter;
          extern CSTYPE workCS;

          1. did you #include <mapand <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?

          Comment

          • Mike Copeland

            #6
            Re: typedef Syntax Error

            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, CSTYPECSINFO; // <= error here
            extern CSINFO cityStInfo;
            extern map<string, CSTYPE>::iterat or csIter;
            extern CSTYPE workCS;
            >
            >
            1. did you #include <mapand <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...)

            Comment

            • James Kanze

              #7
              Re: typedef Syntax Error

              On Oct 31, 10:16 pm, Victor Bazarov <v.Abaza...@com Acast.net>
              wrote:
              red floyd wrote:
              On Oct 31, 2:01 pm, mrc2...@cox.net (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, CSTYPECSINFO;  // <=== error here
                      extern CSINFO cityStInfo;
                      extern map<string, CSTYPE>::iterat or csIter;
                      extern CSTYPE workCS;
              1.  did you #include <mapand <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:james.kan ze@gmail.com
              Conseils en informatique orientée objet/
              Beratung in objektorientier ter Datenverarbeitu ng
              9 place Sémard, 78210 St.-Cyr-l'École, France, +33 (0)1 30 23 00 34

              Comment

              • James Kanze

                #8
                Re: typedef Syntax Error

                On Oct 31, 10:43 pm, mrc2...@cox.net (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:james.kan ze@gmail.com
                Conseils en informatique orientée objet/
                Beratung in objektorientier ter Datenverarbeitu ng
                9 place Sémard, 78210 St.-Cyr-l'École, France, +33 (0)1 30 23 00 34

                Comment

                • Jim Langston

                  #9
                  Re: typedef Syntax Error


                  "Mike Copeland" <mrc2323@cox.ne twrote in message
                  news:MPG.237529 dc7578268298973 0@news.cox.net. ..
                  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, CSTYPECSINFO; // <= error here
                  extern CSINFO cityStInfo;
                  extern map<string, CSTYPE>::iterat or csIter;
                  extern CSTYPE workCS;
                  >>
                  >>
                  >1. did you #include <mapand <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.
                  Visual Studio dev tools & services make app development easy for any developer, on any platform & language. Develop with our code editor or IDE anywhere for free.

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

                  Comment

                  • Bo Persson

                    #10
                    Re: typedef Syntax Error

                    Jim Langston wrote:
                    "Mike Copeland" <mrc2323@cox.ne twrote in message
                    news:MPG.237529 dc7578268298973 0@news.cox.net. ..
                    >>>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, CSTYPECSINFO; // <= error here
                    >>>extern CSINFO cityStInfo;
                    >>>extern map<string, CSTYPE>::iterat or csIter;
                    >>>extern CSTYPE workCS;
                    >>>
                    >>>
                    >>1. did you #include <mapand <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


                    Comment

                    • red floyd

                      #11
                      Re: typedef Syntax Error

                      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.

                      Comment

                      • Richard Herring

                        #12
                        Re: typedef Syntax Error

                        In message <MPG.237529dc75 782682989730@ne ws.cox.net>, Mike Copeland
                        <mrc2323@cox.ne twrites
                        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, CSTYPECSINFO; // <= error here
                        extern CSINFO cityStInfo;
                        extern map<string, CSTYPE>::iterat or csIter;
                        extern CSTYPE workCS;
                        >>
                        >>
                        >1. did you #include <mapand <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

                        Comment

                        • Mike Copeland

                          #13
                          Re: typedef Syntax 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/
                          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

                          Comment

                          • Hendrik Schober

                            #14
                            Re: typedef Syntax Error

                            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, CSTYPECSINFO; // <= error here
                            >>extern CSINFO cityStInfo;
                            >>extern map<string, CSTYPE>::iterat or csIter;
                            >>extern CSTYPE workCS;
                            >>
                            >1. did you #include <mapand <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<{{
                            The message is "syntax error : missing 'token1' before 'token2'",
                            which could be helpful in understanding your problem.
                            I also didn't state that this is in a common .h file I'm building
                            (and I apologize for not mentioning that...)
                            Sounds like one of the headers included before this screwed up.
                            Have your file preprocessed and compile the result. Check what's
                            just above the definition of 'CSTYPE'. (If it still /is/ 'CSTYPE'
                            after preprocessing.)

                            Schobi

                            Comment

                            • Hendrik Schober

                              #15
                              Re: typedef Syntax Error

                              Mike Copeland wrote:
                              [...]>
                              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
                              Works here (FF3).

                              Schobi

                              Comment

                              Working...