What is the proper Syntax for this Pointer?

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

    What is the proper Syntax for this Pointer?

    What I am doing wrong

    This works

    batPointer = adaptors[position].adaptor[channel]->batData;
    adaptors[position].batteries[channel] = batPointer->battery;

    where:
    batData is a pointer to a struct
    batPointer is a pointer to a different kind of struct

    I want one line, but I get compiler errors, what is the correct syntax?
  • santosh

    #2
    Re: What is the proper Syntax for this Pointer?

    Neil wrote:
    What I am doing wrong
    >
    This works
    >
    batPointer = adaptors[position].adaptor[channel]->batData;
    adaptors[position].batteries[channel] = batPointer->battery;
    >
    where:
    batData is a pointer to a struct
    batPointer is a pointer to a different kind of struct
    >
    I want one line, but I get compiler errors, what is the correct
    syntax?
    Please post a complete, minimal program that exhibits the concerned
    error. Without precise definitions
    of 'batPointer', 'adaptors', 'position', 'channel', 'batData',
    and 'battery', we cannot say what the problem could be.

    Comment

    • Chris Dollin

      #3
      Re: What is the proper Syntax for this Pointer?

      Neil wrote:
      What I am doing wrong
      >
      This works
      >
      batPointer = adaptors[position].adaptor[channel]->batData;
      adaptors[position].batteries[channel] = batPointer->battery;
      >
      where:
      batData is a pointer to a struct
      batPointer is a pointer to a different kind of struct
      >
      I want one line, but I get compiler errors, what is the correct syntax?
      What was your one line, what were the declarations of the variables, and
      what were the compiler errors?

      [I'd also be likely to introduce a name for `adaptors[position]`, since it's
      duplicated. And without seeing the rest of your code, I can't tell if your
      assignment above should obviously be extracted into a well-named function
      of its own.]

      --
      Chris "in some contexts, context is everything" Dollin

      Hewlett-Packard Limited registered office: Cain Road, Bracknell,
      registered no: 690597 England Berks RG12 1HN

      Comment

      • James Kuyper

        #4
        Re: What is the proper Syntax for this Pointer?

        Neil wrote:
        ....
        The structs ( minus the uneeded stuff)are
        >
        struct adaptorBatteryD ata
        {
        struct batteryData const *battery;
        };
        >
        struct adaptorData
        {
        struct adaptorBatteryD ata const *batData;
        };
        >
        struct batteryData
        {
        >
        };
        >
        struct adaptorBatteryD ata const *batPointer;
        >
        >
        adaptors[position].batteries[channel] =
        adaptors[position].adaptor[channel].batData->battery;
        Gives the error "structure required on left side of . or *."
        What is missing from what you just gave us is the data type for
        adaptors[position] and adaptors[position].adaptor[channel]. As written,
        your code requires that they both be structures. The message that was
        generated implies that at least one of those expressions is a pointer to
        a structure. If that is the case, then the your problem is due to the
        fact that you've used "." rather than "->".

        Comment

        • Keith Thompson

          #5
          Re: What is the proper Syntax for this Pointer?

          Neil <NeilKurzm@worl dnet.att.netwri tes:
          Tomás Ó hÉilidhe wrote:
          >Neil:
          >> batPointer = adaptors[position].adaptor[channel]->batData;
          >> adaptors[position].batteries[channel] = batPointer->battery;
          >>>
          >>I want one line, but I get compiler errors, what is the correct syntax?
          >>
          [...]
          >>
          >adaptors[position].batteries[channel] = adaptors[position].adaptor
          >[channel]->batData->battery;
          >>
          I thought that, but then though it wrong. Thanks for the answer. And
          the tip.
          >
          I hated to leave the two line solution.
          Why? Is there some virtue in putting as much stuff as possible on one
          line?

          --
          Keith Thompson (The_Other_Keit h) <kst-u@mib.org>
          Looking for software development work in the San Diego area.
          "We must do something. This is something. Therefore, we must do this."
          -- Antony Jay and Jonathan Lynn, "Yes Minister"

          Comment

          • Barry Schwarz

            #6
            Re: What is the proper Syntax for this Pointer?

            On Thu, 29 Nov 2007 03:42:51 -0500, Neil <NeilKurzm@worl dnet.att.net>
            wrote:
            >What I am doing wrong
            What is your end objective? What are really trying to accomplish?
            >
            >This works
            How can it work if you get compiler errors?
            >
            batPointer = adaptors[position].adaptor[channel]->batData;
            adaptors[position].batteries[channel] = batPointer->battery;
            >
            >where:
            >batData is a pointer to a struct
            >batPointer is a pointer to a different kind of struct
            If batPointer is of type struct x* and batData is of type struct y*,
            they are incompatible and there is no implicit conversion between
            them. The only way to assign a value of one type to an object of
            incompatible type is with a cast. However, if the converted pointer
            value does not have the proper alignment you have invoked undefined
            behavior.

            Why do you want a pointer to some object to hold the address of an
            object of different type?
            >
            >I want one line, but I get compiler errors, what is the correct syntax?
            One line of what? You have two independent assignment statements. Do
            you intend to eliminate one?



            Remove del for email

            Comment

            • Barry Schwarz

              #7
              Re: What is the proper Syntax for this Pointer?

              On Fri, 30 Nov 2007 02:53:53 -0500, Neil <NeilKurzm@worl dnet.att.net>
              wrote:


              snip
              >Yes it works. The structures are elaborate ( Not mine ) but they do
              >want the are supposed to. Same the adapter, and the battery from the
              >linked list.
              >
              >The structs ( minus the uneeded stuff)are
              Unfortunately, also minus some needed stuff.
              >
              >struct adaptorBatteryD ata
              >{
              > struct batteryData const *battery;
              >};
              >
              >struct adaptorData
              >{
              struct adaptorBatteryD ata const *batData;
              >};
              >
              >struct batteryData
              >{
              >
              >};
              >
              >struct adaptorBatteryD ata const *batPointer;
              >
              >
              >adaptors[position].batteries[channel] =
              You have not told us what type of struct the object adaptors is a
              pointer to or an array of. The underlying structure apparently has a
              member named batteries which does not match any of the three
              structures you listed.
              >adaptors[position].adaptor[channel].batData->battery;
              It apparently also has a member named adaptor which also doesn't match
              any of the three structures you listed. But adaptor appears to be an
              array of or a pointer to struct adaptorData since it has a member
              named batData.

              batData is a pointer to struct adaptorBatteryD ata which does have a
              member named battery. This member is a pointer to struct
              batteryData.

              So the first question: Is the undefined member batteries an object of
              a suitable type so batteries[i] can receive a value of type pointer to
              struct batteryData?
              >Gives the error "structure required on left side of . or *."
              C doesn't have an operator "*.". It does have two operators "*" but
              neither one is applied to structures.

              So the second question: What is the correct text of the error message?
              Use cut and paste; don't retype.

              And the third question: Which of the objects adaptors[i]. or
              adaptor[i] is not a structure?


              Remove del for email

              Comment

              • Neil

                #8
                Re: What is the proper Syntax for this Pointer?

                Barry Schwarz wrote:
                On Thu, 29 Nov 2007 03:42:51 -0500, Neil <NeilKurzm@worl dnet.att.net>
                wrote:
                >
                >What I am doing wrong
                >
                What is your end objective? What are really trying to accomplish?
                The pointer was use to search a linked list, If it fails I need the
                first item as a place holder.
                >This works
                >
                How can it work if you get compiler errors?
                The two lines worked fine, When I tried to combine them I got the errors.
                >
                > batPointer = adaptors[position].adaptor[channel]->batData;
                > adaptors[position].batteries[channel] = batPointer->battery;
                >>
                >where:
                >batData is a pointer to a struct
                >batPointer is a pointer to a different kind of struct
                >
                If batPointer is of type struct x* and batData is of type struct y*,
                they are incompatible and there is no implicit conversion between
                them. The only way to assign a value of one type to an object of
                incompatible type is with a cast. However, if the converted pointer
                value does not have the proper alignment you have invoked undefined
                behavior.
                struct x* contains a pointer to a linked list of struct y* (struct x* is
                also a linked list)
                ->a->b->c->d->NULL
                | | | |
                1 1 1 1
                | | |
                2 2 2
                | |
                3 3
                >
                Why do you want a pointer to some object to hold the address of an
                object of different type?
                >
                >I want one line, but I get compiler errors, what is the correct syntax?
                >
                One line of what? You have two independent assignment statements. Do
                you intend to eliminate one?
                No combine
                >
                >
                >
                Remove del for email
                The earlier suggestion worked fine. Thanks to all.
                Besides learning the pointer, I learn that I need to include more in a post.

                Comment

                Working...