|
Gast |
|
|
Beiträge: ---
|
|
|
|
Anmeldedatum: ---
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 12.08.2010, 12:47
Titel: mex-File
|
|
Hallo,
ich schreibe gerade an einem mex-file
Aber bei der Ausgabe bekomme ich den Fehler:
operands of = have illegal types `double' and `pointer to double'
für: *(mxGetPr(plhs[0]))=x; Ich hab auch x richtig vorbelegt. D.h. ich dachte ich kann so alle Berechnungen an Matlab ausgeben lassen. Aber anscheinend passt was mit der Zuweisung nicht? Was ist flasch?
Besten Dank
|
|
|
|
|
Jan S |
Moderator
|
|
Beiträge: 11.057
|
|
|
|
Anmeldedatum: 08.07.10
|
|
|
|
Wohnort: Heidelberg
|
|
|
|
Version: 2009a, 2016b
|
|
|
|
|
|
Verfasst am: 12.08.2010, 15:14
Titel: Re: mex-File
|
|
Hallo Anonymous,
ich glaube, der Compiler kann mit dem komischen Kästchen nichts anfangen :-)
Ein weiteres Beispiel für verwirrende Darstellung in der Code-Umgebung.
"x[n]" beudeted, dass "x" ein Pointer auf ein DOUBLE Array ist.
"*(mxGetPr(plhs[0]))" ist der Inhalt des ersten Elements der Daten von "plhs[0]". Du kannst aber nicht ein DOUBLE Element mit einem Pointer auf ein DOUBLE belegen, wie die Fehlermeldung klar sagt.
Wahrscheinlich meinst Du:
Damit hast Du aber nur das erste Element kopiert. Falls Du das ganze Array kopieren möchtest, nimm "memcpy". Meistens ist es aber effizienter, Du erstellst das Ausgabe-Array zuerst und schreibst dann gleich in mxGetr(plhs[0]) rein.
Gruß, Jan
|
|
|
Gast |
|
|
Beiträge: ---
|
|
|
|
Anmeldedatum: ---
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 12.08.2010, 15:34
Titel:
|
|
Damit bekomme ich diese Fehlermeldung
Error koor.c: 39 operands of + have illegal types `pointer to int' and `double'
Error koor.c: 39 type error: pointer expected
Error koor.c: 40 syntax error; found `y' expecting `;'
Error koor.c: 40 operands of + have illegal types `pointer to int' and `double'
Error koor.c: 40 type error: pointer expected
5 errors, 0 warnings
|
|
|
Jan S |
Moderator
|
|
Beiträge: 11.057
|
|
|
|
Anmeldedatum: 08.07.10
|
|
|
|
Wohnort: Heidelberg
|
|
|
|
Version: 2009a, 2016b
|
|
|
|
|
|
Verfasst am: 12.08.2010, 15:59
Titel:
|
|
Hallo Anonymous,
Anonymous hat Folgendes geschrieben: |
Damit bekomme ich diese Fehlermeldung
Error koor.c: 39 operands of + have illegal types `pointer to int' and `double'
Error koor.c: 39 type error: pointer expected
Error koor.c: 40 syntax error; found `y' expecting `;'
Error koor.c: 40 operands of + have illegal types `pointer to int' and `double' |
Du traust uns ja eine Menge zu: Woher könnte ich wissen, welches die Zeilen 39 und 40 sind?
Die Fehlermeldung sagt Dir, dass Du versuchst in diesen Zeilen eine DOUBLE value und einen Pointer auf einen INT Wert zu addieren. Das geht natürlich nicht.
Du musst in C die Typen der Variablen genau kontrollieren und darfst nicht Pointer und Werte mixen.
Viel Erfolg, Jan
|
|
|
Gast |
|
|
Beiträge: ---
|
|
|
|
Anmeldedatum: ---
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 12.08.2010, 16:04
Titel:
|
|
Hallo Jan,
sorry, hab vergessen dazu zu schreiben woher der Fehler kommt.
Es bezog sich auf die letzten beiden Zeilen:
/* Store return value */
*(mxGetPr(plhs[0]))=memcpy(x);
*(mxGetPr(plhs[1]))=memcpy(y);
dachte so kann ich die Werte für x und y reinkopieren und meine Werte zurück an Matlab zu schicken. Leider nein...
|
|
|
Jan S |
Moderator
|
|
Beiträge: 11.057
|
|
|
|
Anmeldedatum: 08.07.10
|
|
|
|
Wohnort: Heidelberg
|
|
|
|
Version: 2009a, 2016b
|
|
|
|
|
|
Verfasst am: 12.08.2010, 16:24
Titel:
|
|
Hallo Gast,
ja, das ist kein gültiger C-Code.
Matlab liefert ein paar Beispiele mit (matlabroot/extern/examples), und in den FileExchange Seiten gibt es viele sehr schöne C-Mex-Beispiele, von denen man sich einiges anschauen kann:
http://www.mathworks.com/matlabcentral/fileexchange/
Gruß, Jan
|
|
|
Gast |
|
|
Beiträge: ---
|
|
|
|
Anmeldedatum: ---
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 12.08.2010, 19:35
Titel:
|
|
|
|
Jan S |
Moderator
|
|
Beiträge: 11.057
|
|
|
|
Anmeldedatum: 08.07.10
|
|
|
|
Wohnort: Heidelberg
|
|
|
|
Version: 2009a, 2016b
|
|
|
|
|
|
Verfasst am: 12.08.2010, 23:08
Titel:
|
|
Hallo Gast,
helfen können wir, wenn Du eine Frage stellst.
Ich denke mir gerne eine Lösung aus, aber mir auch eine Frage auszudenken ist bestimmt nicht effizient.
Das sieht aus, als würden Dir die Beispiele weiterhelfen. Ein C-Tutorial wäre wohl auch hilfreich.
Gruß, Jan
|
|
|
Gast |
|
|
Beiträge: ---
|
|
|
|
Anmeldedatum: ---
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 13.08.2010, 12:25
Titel:
|
|
Die Zips aus dem File Exchange kann ich leider nicht öffnen. Hab nichts um welche zu anzuschaun und exe.Datein kann ich nicht/darf ich nicht herunterladen.
Etwas weiter bin ich aber dennoch:
memcpy(*(mxGetPr(plhs[0])),*x[i],sizeof(double[laenge]))
memcpy(*(mxGetPr(plhs[1])),*y[i],sizeof(double[laenge]))
Zumindest sollte die Zuweisung für memcpy in etwa so sein... in etwa... Fehelr kann ich gerade nicht dazuschreiben, weil Matlab noch etwas anders rechnet.
|
|
|
Jan S |
Moderator
|
|
Beiträge: 11.057
|
|
|
|
Anmeldedatum: 08.07.10
|
|
|
|
Wohnort: Heidelberg
|
|
|
|
Version: 2009a, 2016b
|
|
|
|
|
|
Verfasst am: 13.08.2010, 16:03
Titel:
|
|
|
|
|
Hallo Anonymous,
Wenn Dein Institut/Arbeitgeber möchte, dass Du mit Mex-Files arbeitest, sollte er Dir eine Zip-Funktion zur Verfügung stellen. Da das in WindowsXP (und neuer natürlich) und MacOS bereits eingebaut ist, vermute ich, Du arbeitest auf einer Linux-Maschine mit einem betagteren System.
Exe-Dateien gibt es zum Glück in der FEX nicht.
Das ist schon etwas besser. Trotzdem wird es Deine Maschine abschmieren lassen. Es wäre allemal effizienter, in die Beispiele von Matlab reinzuschauen - ich finde da z.B. 10 Datein, die "memcpy" enthalten. Ich könnte auch mit vielen Tips einen C-Kurs nicht ersetzen. In dieser Zeile stecken alleine schon 3 Fehler, die jeweils einen Crash erzeugen werden. Und C ist wirklich keine Sprache, mit der man sich schrittweise an ein laufendes Programm heranraten kann. C ist einfach richtig tückisch.
Obwohl ich eindeutig vermute, dass es die Probleme nicht beheben wird:
Dies kopiert den Inhalt des Arrays x in die Daten des Ausgabe Arrays.
Viel Erfolg und Geduld, Jan
|
|
|
Gast |
|
|
Beiträge: ---
|
|
|
|
Anmeldedatum: ---
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 13.08.2010, 18:56
Titel:
|
|
|
|
|
|
Einstellungen und Berechtigungen
|
|
Du kannst Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen. Du kannst Dateien in diesem Forum posten Du kannst Dateien in diesem Forum herunterladen
|
|
Impressum
| Nutzungsbedingungen
| Datenschutz
| FAQ
| RSS
Hosted by:
Copyright © 2007 - 2024
goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks
MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.
|
|