access to structure members

N

noone

What is the syntax to access members of a structure without
explicitly naming the structure in every access?

struct mytype {
int a;
char* b;
long c;
} IT;

How can I access the structure members in a way similar to the old pascal
USING statement?

using IT (
a=5;
b="hello";
c=45l;
);


I cannot remember the c++ syntax to accomplish this.
 
R

red floyd

What is the syntax to access members of a structure without
explicitly naming the structure in every access?

struct mytype {
int a;
char* b;
long c;
} IT;

How can I access the structure members in a way similar to the old pascal
USING statement?

using IT (
a=5;
b="hello";
c=45l;
);

1. The old Pascal construct was a "with" statement.
2. There is no way to do what you want. Why do you want to do so? Your
code is more maintainable without it.
 
V

Victor Bazarov

What is the syntax to access members of a structure without
explicitly naming the structure in every access?

struct mytype {
int a;
char* b;
long c;
} IT;

How can I access the structure members in a way similar to the old
pascal USING statement?

using IT (
a=5;
b="hello";
c=45l;
);


I cannot remember the c++ syntax to accomplish this.

Nobody can. There is no such syntax. Non-static data members
require an instance of the class to be accessed. You can only
access them without additional qualification inside a non-static
member function, where there is an implicit "this->".

V
 
S

Salt_Peter

What is the syntax to access members of a structure without
explicitly naming the structure in every access?

struct mytype {
int a;
char* b;
long c;

} IT;

How can I access the structure members in a way similar to the old pascal
USING statement?

using IT (
a=5;
b="hello";

Its time to unlearn the lies:
member b is a pointer to a single character. char* b cannot store
anything else.
Relying on a pointer to a single char to store an array of characters
is doomed to fail.
The compiler has not allocated or reserved memory to store an array of
chars.
You'ld have to store the null-terminated character sequence using a
buffer (ie: char b[128];).
However - there is a better solution: std::string (its dynamic and
packed with features).
c=45l;
);

I cannot remember the c++ syntax to accomplish this.

Using a function or a constructor. IT is not a type/struct/class, its
an instance of mytype.
Consider a primitive array: mytype arr[100];
Which one of those 100 instances' member's did you want to modify?
You need to tell the program which one to act on. (ie:
array[0].set(...);)
But wait a minute, why set anything when you can allocate AND
initialize private members simultaneously at construction time?

#include <iostream>
#include <string>

struct mytype {
private:
int a;
std::string b;
long c;
public:
// default ctor + init list
mytype()
: a(0), b("default string"), c(0) { }
// parametized ctor + init list
mytype(const int n,
const std::string& s,
const long l)
: a(n), b(s), c(l) { }
// friend op<< for output
friend std::eek:stream& operator<<(std::eek:stream& os, const mytype& t)
{
os << "a = " << t.a;
os << "\nb = " << t.b;
os << "\nc = " << t.c;
return os;
}
};

int main()
{
mytype instance(5, "hello", 451); // done
std::cout << instance << std::endl;

mytype array[100];
std::cout << array[0] << std::endl;
}

// Note: all 100 instances in that array[] are already set.
 
S

Salt_Peter

What is the syntax to access members of a structure without
explicitly naming the structure in every access?

struct mytype {
int a;
char* b;

Its time to unlearn the lies:
member b is a pointer to a single character. char* b cannot store
anything else. Relying on a pointer to a single char to store an array
of characters
is doomed to fail. The compiler has not allocated or reserved memory
to store an array of
chars. You'ld have to store the null-terminated character sequence
using a
buffer (ie: char b[128];).
However - there is a better solution: std::string (its dynamic and
packed with features).
long c;

} IT;

How can I access the structure members in a way similar to the old pascal
USING statement?

using IT (
a=5;
b="hello";
c=45l;
);

I cannot remember the c++ syntax to accomplish this.

Using a function or a constructor. IT is not a type/struct/class, its
an instance of mytype. Consider a primitive array:
mytype arr[100];
Which one of those 100 instances' member's did you want to modify? You
need to tell the program which one to act on. (ie: array[0].set(...);)
But wait a minute, why set anything when you can allocate AND
initialize private members simultaneously at construction time?

#include <iostream>
#include <string>

struct mytype {
private:
int a;
std::string b;
long c;
public:
// default ctor + init list
mytype()
: a(0), b("default string"), c(0) { }
// parametized ctor + init list
mytype(const int n,
const std::string& s,
const long l)
: a(n), b(s), c(l) { }
// friend op<< for output
friend std::eek:stream& operator<<(std::eek:stream& os, const mytype& t)
{
os << "a = " << t.a;
os << "\nb = " << t.b;
os << "\nc = " << t.c;
return os;
}

};

int main()
{
mytype instance(5, "hello", 451); // done
std::cout << instance << std::endl;

mytype array[100];
std::cout << array[0] << std::endl;

}

// Note: all 100 instances in that array[] are already set.
 
D

Devon Null

What is the syntax to access members of a structure without
explicitly naming the structure in every access?

struct mytype {
int a;
char* b;
long c;
} IT;

How can I access the structure members in a way similar to the old pascal
USING statement?

using IT (
a=5;
b="hello";
c=45l;
);


I cannot remember the c++ syntax to accomplish this.
couldn't you use #define and rename each one to an alias? Not saying it
is a good way, just a possibility (I think). Feel free to correct me if
I am wrong.
 
P

Pete Becker

Salt_Peter said:
Its time to unlearn the lies:
member b is a pointer to a single character. char* b cannot store
anything else.
Relying on a pointer to a single char to store an array of characters
is doomed to fail.
The compiler has not allocated or reserved memory to store an array of
chars.

On the contrary: the compiler allocated and reserved memory for the
string "hello", including its terminating null character. It's perfectly
appropriate to refer to that array through a char* (although a const
char* would be preferable). Pointers often point to a single object, but
they also often point to the first element of an array.
You'ld have to store the null-terminated character sequence using a
buffer (ie: char b[128];).
However - there is a better solution: std::string (its dynamic and
packed with features).

That depends on what the problem is. There's nothing in the original
question that supports a judgment about the relative merits of char*
versus std::string. That's not important, though, since it has nothing
to do with what was actually asked.

--

-- Pete
Roundhouse Consulting, Ltd. (www.versatilecoding.com)
Author of "The Standard C++ Library Extensions: a Tutorial and
Reference." (www.petebecker.com/tr1book)
 

Ask a Question

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

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,768
Messages
2,569,574
Members
45,051
Latest member
CarleyMcCr

Latest Threads

Top