| Topic: |
DEVELOP > c-Plus-Plus |
| User: |
"George2" |
| Date: |
17 Jan 2008 02:10:16 AM |
| Object: |
compile error about void* |
Hello everyone,
What is wrong with the code, I just want to allocate an array of 100
void* pointers. :-)
[Code]
int main()
{
void** p;
p = new (void*) [100];
return 0;
}
[/Code]
d:\visual studio 2008\projects\test_void1\test_void1\main.cpp(5) : error C2143: syntax error : missing ';' before '['
1>d:\visual studio 2008\projects\test_void1\test_void1\main.cpp(5) :
error C3409: empty attribute block is not allowed
1>d:\visual studio 2008\projects\test_void1\test_void1\main.cpp(5) :
error C2143: syntax error : missing ']' before 'constant'
1>d:\visual studio 2008\projects\test_void1\test_void1\main.cpp(5) :
error C2143: syntax error : missing ';' before 'constant'
1>d:\visual studio 2008\projects\test_void1\test_void1\main.cpp(5) :
error C2143: syntax error : missing ';' before ']'
1>d:\visual studio 2008\projects\test_void1\test_void1\main.cpp(5) :
error C2143: syntax error : missing ';' before ']'
thanks in advance,
George
.
|
|
| User: "" |
|
| Title: Re: compile error about void* |
17 Jan 2008 02:18:07 AM |
|
|
void** p;
p = new (void*) [100];
Write this:
p = new void*[100];
You syntax: using a special new operator.
.
|
|
|
|
| User: "jalina" |
|
| Title: Re: compile error about void* |
17 Jan 2008 05:57:24 AM |
|
|
George2 a écrit :
Hello everyone,
What is wrong with the code, I just want to allocate an array of 100
void* pointers. :-)
[Code]
int main()
{
void** p;
p = new (void*) [100];
return 0;
}
[/Code]
d:\visual studio 2008\projects\test_void1\test_void1\main.cpp(5) : error C2143: syntax error : missing ';' before '['
1>d:\visual studio 2008\projects\test_void1\test_void1\main.cpp(5) :
error C3409: empty attribute block is not allowed
1>d:\visual studio 2008\projects\test_void1\test_void1\main.cpp(5) :
error C2143: syntax error : missing ']' before 'constant'
1>d:\visual studio 2008\projects\test_void1\test_void1\main.cpp(5) :
error C2143: syntax error : missing ';' before 'constant'
1>d:\visual studio 2008\projects\test_void1\test_void1\main.cpp(5) :
error C2143: syntax error : missing ';' before ']'
1>d:\visual studio 2008\projects\test_void1\test_void1\main.cpp(5) :
error C2143: syntax error : missing ';' before ']'
thanks in advance,
George
typedef void* PVOID;
int
main()
{
PVOID *p;
p = new PVOID[100];
return 0;
}
.
|
|
|
|
| User: "Michael DOUBEZ" |
|
| Title: Re: compile error about void* |
17 Jan 2008 02:28:36 AM |
|
|
George2 a écrit :
Hello everyone,
What is wrong with the code, I just want to allocate an array of 100
void* pointers. :-)
[Code]
int main()
{
void** p;
p = new (void*) [100];
p = new void*[100];
return 0;
}
[/Code]
d:\visual studio 2008\projects\test_void1\test_void1\main.cpp(5) : error C2143: syntax error : missing ';' before '['
1>d:\visual studio 2008\projects\test_void1\test_void1\main.cpp(5) :
error C3409: empty attribute block is not allowed
1>d:\visual studio 2008\projects\test_void1\test_void1\main.cpp(5) :
error C2143: syntax error : missing ']' before 'constant'
1>d:\visual studio 2008\projects\test_void1\test_void1\main.cpp(5) :
error C2143: syntax error : missing ';' before 'constant'
1>d:\visual studio 2008\projects\test_void1\test_void1\main.cpp(5) :
error C2143: syntax error : missing ';' before ']'
1>d:\visual studio 2008\projects\test_void1\test_void1\main.cpp(5) :
error C2143: syntax error : missing ';' before ']'
thanks in advance,
George
.
|
|
|
| User: "James Kanze" |
|
| Title: Re: compile error about void* |
18 Jan 2008 04:20:57 AM |
|
|
On Jan 17, 9:28 am, Michael DOUBEZ <michael.dou...@free.fr> wrote:
George2 a =E9crit :
What is wrong with the code, I just want to allocate an array of 100
void* pointers. :-)
[Code]
int main()
{
void** p;
p =3D new (void*) [100];
p =3D new void*[100];
Or "p =3D new (void * [100]) ;".
The type specifier in a new expression has a very restricted
syntax. In particular, it cannot contain parentheses unless it
is entirely surrounded by parentheses.
Note that the syntax "new (int*)[100]" would be legal syntax,
but doesn't do what you might expect, and will invoke undefined
behavior at run-time---it allocates a single int*, then uses it
as if it were a pointer to the first element of an array,
accessing the 101st element. Of course, the resulting type of
the expression is int, so you will almost certainly get a type
error when you try to assign the results.
--
James Kanze (GABI Software) email:james.kanze@gmail.com
Conseils en informatique orient=E9e objet/
Beratung in objektorientierter Datenverarbeitung
9 place S=E9mard, 78210 St.-Cyr-l'=C9cole, France, +33 (0)1 30 23 00 34
.
|
|
|
|
|
| User: "anon" |
|
| Title: Re: compile error about void* |
17 Jan 2008 02:22:19 AM |
|
|
George2 wrote:
Hello everyone,
What is wrong with the code, I just want to allocate an array of 100
void* pointers. :-)
[Code]
int main()
{
void** p;
p = new (void*) [100];
return 0;
}
[/Code]
d:\visual studio 2008\projects\test_void1\test_void1\main.cpp(5) : error C2143: syntax error : missing ';' before '['
It tells you whats wrong.
Try this instead:
int main()
{
void** p;
p = new void* [100];
return 0;
}
.
|
|
|
|
| User: "Ioannis Vranos" |
|
| Title: Re: compile error about void* |
19 Jan 2008 06:18:25 PM |
|
|
George2 wrote:
Hello everyone,
What is wrong with the code, I just want to allocate an array of 100
void* pointers. :-)
[Code]
int main()
{
void** p;
p = new (void*) [100];
return 0;
}
[/Code]
Wrong syntax:
The correct way to do what you want is:
void **p= new void *[100];
.
|
|
|
|
| User: "=?iso-8859-1?q?Tom=E1s_=D3_h=C9ilidhe?=" |
|
| Title: Re: compile error about void* |
17 Jan 2008 07:58:23 AM |
|
|
George2:
p = new (void*) [100];
Where T is a type:
If you want an array of pointers then:
T*[num]
If you want a pointer to an array, then:
T(*)[num]
--
Tomás Ó hÉilidhe
.
|
|
|
| User: "James Kanze" |
|
| Title: Re: compile error about void* |
18 Jan 2008 04:31:53 AM |
|
|
On Jan 17, 2:58 pm, "Tom=E1s =D3 h=C9ilidhe" <t...@lavabit.com> wrote:
George2:
p =3D new (void*) [100];
Where T is a type:
If you want an array of pointers then:
T*[num]
If you want a pointer to an array, then:
T(*)[num]
Not in a new expression. In a new expression, you'd have to put
that in parentheses (i.e. "(T(*)[num])").
More generally, I don't think there's any context in the
language where "(void*)[100]" could be legal. If the [...] is
the subscript operator, then what precedes must be an expression
(and "(void*)" isn't a legal expression). And if the [...] is
meant to be part of a declaration, the only context in a
declaration where (void*) would be legal is as a list of
function parameters, and you can't declare a function to return
an array. (You can declare a function to return a pointer or a
reference to an array, but in this case, it would be something
like:
int (&f(void*))[100] ;
with an extra closing ) in the string.)
--
James Kanze (GABI Software) email:james.kanze@gmail.com
Conseils en informatique orient=E9e objet/
Beratung in objektorientierter Datenverarbeitung
9 place S=E9mard, 78210 St.-Cyr-l'=C9cole, France, +33 (0)1 30 23 00 34
.
|
|
|
|
|
| User: "Jerry Coffin" |
|
| Title: Re: compile error about void* |
19 Jan 2008 05:40:03 PM |
|
|
In article <852ad1fa-f151-4bb5-b2c6-802042120aa8
@m34g2000hsf.googlegroups.com>, says...
Hello everyone,
What is wrong with the code, I just want to allocate an array of 100
void* pointers. :-)
[Code]
int main()
{
void** p;
p = new (void*) [100];
return 0;
}
[/Code]
You've gotten a number of answers that show the problem with the syntax
you're using. None, however, has mentioned that there are usually better
ways of doing this in C++. If you really want to do this, something like
"std::vector<void *> p(100)" will do the job -- but an array (or vector)
of pointers to void sounds somewhat questionable in itself. If you're
doing something like writing your own memory allocator, this is likely
to make sense -- but for most code, a pointer to void (not to mention a
lot of pointers to void) tends to indicate a possible problem.
--
Later,
Jerry.
The universe is a figment of its own imagination.
.
|
|
|
|

|
Related Articles |
|
|