HÄ? void* is not a pointer-to-object type. JaNe, nem void pointer nem (void)pointerZuweisenGehtNich?

Gast #3730004
Lesenswert?

Geht nicht: arr[0]=p;
Kaputt!
Zieht die Notbremse!
1
#include <iostream>
2

3
using namespace std;
4

5

6
   void *arr=new void *[10];
7
   
8
   void f(void *p)
9
   {
10
       arr[0]=p; // warum geht das nicht? ich will dass so! wie kann ich mich beim Compiler einschleimen, damit das geht?
11
       return;
12
   }
13

14
int main()
15
{
16
   cout << "Hello damn void *" << endl; 
17
         
18
   int n=10;
19
   int *p=&n;
20
   f((void*)p);
21
   
22
   
23
   
24
   return 0;
25
}

/*
Fehlermeldung von:
http://www.compileonline.com/compile_cpp11_online.php

Compiling the source code....
$g++ -std=c++11 main.cpp -o demo -lm -pthread -lgmpxx -lgmp -lreadline 
2>&1

main.cpp: In function �void f(void*)�:
main.cpp:10:13: warning: pointer of type �void *� used in arithmetic 
[-Wpointer-arith]
        arr[0]=p;
Klappe du Warnung, ich bin schlauer als DU!

main.cpp:10:13: error: �void*� is not a pointer-to-object type
*/
Gast #3730006
Lesenswert?

void *arr ist gar kein Array von void Pointern sondern nur ein void 
Pointer. Versuch mal void **arr. Scheinbar ist der compiler doch 
schlauer als du... Im übrigen ist der cast zu void* in der main Funktion 
unnötig.
Gast #3730273
Lesenswert?

DasSams schrieb:
> // warum geht das nicht? ich will dass so!
Das ist dem Compiler herzlich egal was Du willst! Du hast dich an 
die Regeln der Sprache zu halten, und wenn du es nicht machst, gibt es 
vom Compiler eben 'ne Schelle, basta!

DasSams schrieb:
> Wärh schöner wenn der compiler ne klarere Meldung geben würde
Wenn du die Schelle nicht verstehst, dann ist das ebenso wenig das 
Problem des Compilers. Dann muss man sich halt mal mit der Sprache, 
welche man gedenkt einzusetzen, beschaeftigen.
Gast #3730465
Lesenswert?

Rufus Τ. Firefly schrieb:
> jonas biensack schrieb:
>> Der Fehler war eine Zuweisung außerhalb eines Funktionsblocks.
>
> Nein, der Fehler trat in der Funktion "f" auf.
>
> Die Zuweisung außerhalb des Funktionsblocks, die mich anfänglich auch
> verwirrte, ist in C++ zulässig.

Zuweisungen sind dort auch in C++ nicht erlaubt. Es handelt sich aber 
nicht um eine Zuweisung, sondern um eine Initialisierung. Die ist in C++ 
im Gegensatz zu C auch mit dynamischem Initialisierer möglich.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren