Probleme mit Char-Zeigern und arrays
-
KalrHeinz schrieb:
ja doch schon so gemacht also:
//header.h extern int bla; extern unsigned char ARRAY[15]; //Zwei.cpp #include "header.h" bla=3; ARRAY[1]=0x13; //Beispielehaft
und dann kommt bei bla=3 unbekannter Datentyp!
Wo steht denn das bla=3 ?
In einer Funktion oder außerhalb ?
-
außerhalb
-
KalrHeinz schrieb:
außerhalb
Zuweisungen können nicht außerhalb von Funktionsblöcken stehen.
-
seit wann das? Außerhalb ist es eine globale Variable, innerhalb eine für nur diese Funktion!
-
drei dateien sind das? lade doch mal irgendwo hoch das ganze, vllt erbarmt sich ja jemand ...
wieso haben deine dateien eigentlich die endung cpp?
das ist eher ungewöhnlich und manch ein compiler schaltet dann in den c++ modus.
nicht dass es jetzt für dein problem unbedingt relevant sein müsste, nur ne frage am rande ...
-
KalrHeinz schrieb:
seit wann das?
Immer schon und das wird auch ewig so bleiben. Wann sollte denn dieser Code ausgeführt werden, wenn er zu keiner Funktion gehört? Du denkst vermutlich gerade an die Definition einer Variablen mit gleichzeitiger Zuweisung.
-
weil ich das ganze im Visual Studio 2008 mache und es dort kein wirklich reines C mehr gibt... außerdem nutzte ich auch die << Operatoren usw. also einen schönen Misch-Masch aus beiden!
Hab einen Teil des Fehlers wohl beseitigt, hatte (wie das so oft kommt) ein Strichpunkt vergessen... warum dann Linker Fehler kommen, ist mir fraglich. Jetzt hab ich noch einen Linkerfehler, der mir sagt, ich hätte ein unaufgelöstes Symbol, was wohl nicht mehr das Problem ist, was ich bisher hatte.
Also nochmal Danke für die Hilfe!
-
nene Beispiel:
#include "sonstwas" int a = 3; // globale Variable, die in jeder Funktion dieser Datei verwendet werden kann, oder falls es ein Header ist in jeder Funktion, die den Header kennt int main(void) { Funktiona() } int Funtkiona { a=4; // neuen Wert zuweisen }
und so mache ich das seit immer eigendlich...
-
Aber in deinem anderen Beispiel war da doch drei Dateien mit Headern.
Dann wäre das doch so:
#include "was" extern int a; // steht sonst in einem Header a = 3; // Und hier bekommst du deinen Fehler int foo(void) { Funktiona() } int Funtkionb { a=4; // neuen Wert zuweisen }
-
habe es halt so:
//header.h #pragma once extern int a = 3; ARRAY[15]; // Eins.cpp #include "header.h" str = getstring; a(str); //Zwei.cpp #include "header.h" a{ if (str==0] return; else output(str,a) } // Drei.cpp #include "header.h" output{ cout<<a<<ARRAY<<endl; } //kein realer code, fehlen einige Dinge, nur zur Verständlichkeit!
Und da war wohl der Fehler, dass die Variable a in allen drei .cpps wieder bekannt war und sozusagen neu deklariert wurde... egal ob mit Wert Zuweisung oder Ohne!
Habe also nun die Variable a in der Funktion a angelegt udn explizit an das pout mit übergeben, dann funktionierts! War mir vorher nicht ganz bewusst
-
KalrHeinz schrieb:
nene Beispiel:
Jaja:
SeppJ schrieb:
Du denkst vermutlich gerade an die Definition einer Variablen mit gleichzeitiger Zuweisung.
edit: Du hast noch geantwortet, während ich geantwortet habe. Meine Antwort darauf:
1. Guck dir unbedingt an, was der Unterschied zwischen Deklaration und Definition ist. Das muss man verstehen. Du hast es nicht.
2.cout<<a<<ARRAY<<endl;
Compiliert das? Falls ja, dann stell deinen Compiler mal auf C! Das ist nämlich ein Fetzen C++. C und C++ sind zwei ganz verschiedene Sprachen, nicht mischen!
-
SeppJ schrieb:
C und C++ sind zwei ganz verschiedene Sprachen, nicht mischen!
er mischt aber, hat er ja schon geschrieben.
-
1. ja das compiliert...
2. unter Visual Studio hat man nicht so wirklich die Chance reines C zu verwenden!
3. genau ich mische, wie wohl 75% der Leute, die in C oder C++ programmieren
4. verwende ich einige APIs, wie boost.iso, SQLAPI und TCPDumb, welche allesamt auch eher eine Mischung aus C und C++ nutzen.
5. Das schlimme daran ist, ich weiß, dass es unterschiedlich ist, mache trotzdem den Misch-Masch und das weil:
6. man das im Studium sogar inzwischen so gelernt bekommt! Erst reines C und dann eins nach dem andren C++, was immer auf ein Misch-Masch hinausläuft... ich blicke daher manchmal selbst nicht, was welcher Sprache angehört.
-
KalrHeinz schrieb:
1. ja das compiliert...
Naivling. Merkst du nicht, dass das Compilieren allein überhaupt keine Aussage über die Funktionsfähigkeit des ablaufenden Programms macht? Wahrscheinlich liest du noch nicht mal die Compilerwarnungen.
KalrHeinz schrieb:
2. unter Visual Studio hat man nicht so wirklich die Chance reines C zu verwenden!
Schwachsinn. Wenn du keine Ahnung hast, wie du es machen kannst, heißt das noch lange nicht, dass man es nicht kann.
KalrHeinz schrieb:
3. genau ich mische, wie wohl 75% der Leute, die in C oder C++ programmieren
Ja genau, alles Dilettanten. Glauben, weil die Quelldateiendung cpp heißt und sie cin/cout nutzen, sie können C++ Programmieren, und da sie irgendwo gelesen haben, dass C++ eine OOP Sprache ist, glauben sie, sie könnten objektorientiert programmieren.
KalrHeinz schrieb:
4. verwende ich einige APIs, wie boost.iso, SQLAPI und TCPDumb, welche allesamt auch eher eine Mischung aus C und C++ nutzen.
Die boost-Autoren haben die Weisheit auch nicht mit Löffeln gegessen, da gibts auch malloc-Caster, was Schrott ist, da brauchst du dir nichts vormachen (lassen).
KalrHeinz schrieb:
5. Das schlimme daran ist, ich weiß, dass es unterschiedlich ist, mache trotzdem den Misch-Masch und das weil:
Weißt du nicht. Du kennst die Grundlagen und Intentionen von C nicht. Du kennst die Grundlagen und Intentionen von C++ nicht. Du hast keine Erfahrung. Und deshalb kannst du dir überhaupt kein fundiertes Urteil bilden. Reiner Herdentrieb: was die anderen machen, mache ich auch.
KalrHeinz schrieb:
6. man das im Studium sogar inzwischen so gelernt bekommt! Erst reines C und dann eins nach dem andren C++, was immer auf ein Misch-Masch hinausläuft... ich blicke daher manchmal selbst nicht, was welcher Sprache angehört.
Das heißt richtig: "... gelehrt bekommen ...".
Deutsch kannst du auch nicht. Bloß weil irgendjemand Professor/Dozent ist, heißt das noch lange nicht, dass er Praxiserfahrung und Ahnung hat, bei euch Erstsemestern ist diese Naiv-Gläubigkeit aber (leider) weit verbreitet.
-
mit dem falschen Fuß aufgestanden?
zu 1:
Ich lese Compilerwarnungen, bei dem Beispiel werden aber keine ausgegeben!zu 2.
Dann zeig mal, wie du unter VS eine reines C Programm anlegst? Das möchte ich sehen! Du kannst natürlich nur C schreiebn, okay...zu 3.
Habe NIE behauptet dass ich C oder C++ kann, sonst würde ich hier nicht fragen! Und in dem Fall ist meine Programmierung Streambasiert und hat Objektorientierung einen feuchten Furz zu tun! Ich sagte nur, ich nutzte Funktionen und Sprachliche Mittel aus beiden!zu 4.
ja wohl wahrzu 5.
Richtig, ich bin am Lernen, also kann ich das nicht und weiß auch nicht immer was grade C und ws C++ ist richtig. Aber ein Urteil bilden kann ich mir sowohl, darüber, dass ich einen Mix nutze, denn soviel weiß ich!zu 6.
Das hat auch nie jemand behauptet, der Prof. war allerdings bei SuSe, falls die bekannt sind... was auch nicht heißt er hat Ahnung, aber zumindest war er da sehr lange.
Übrigends bin ich kein Erstsemester sondern grade mit dem Studium fertig, allerdings habe ich keine Informathik studiert, sondern Elektrotechnik, weswegen ich wohl nur Grundlagen in den Info-Sachen hatte, was ja nicht heißt, dass ich mich da nicht weiter vertiefen kann usw.
Und ja beim schnell schreiben vertue ich mich ab und an im deutschen, wie so viele... aber das nur Rande, hast da schließlich Recht!
-
KalrHeinz schrieb:
2. unter Visual Studio hat man nicht so wirklich die Chance reines C zu verwenden!
.Doch, kann man natürlich. Methode 1 wäre, einfach seine Dateien mit der Endung .c zu versehen. Außerdem kannst du es auch explizit in den Projekteinstellungen festlegen. Dann nimmt er immer den C-Compiler, egal wie die jeweilige Datei heißt.
EDIT: Zu finden unter C/C++ => Erweitert => Kompilierungsart
-
KalrHeinz schrieb:
3. genau ich mische, wie wohl 75% der Leute, die in C oder C++ programmieren
.Es mag genug Leute geben, die ihren C++-Code mit C vermischen. Aber es gibt eigentlich niemanden (außer dir), der seinen C-Code mit C++ vermischt.
-
_matze schrieb:
Aber es gibt eigentlich niemanden (außer dir), der seinen C-Code mit C++ vermischt.
Gerade bei MS-VS: C89 mit Zeilenkommentar //
-
KalrHeinz schrieb:
zu 2.
Dann zeig mal, wie du unter VS eine reines C Programm anlegst? Das möchte ich sehen! Du kannst natürlich nur C schreiebn, okay...Das brauche ich nicht zeigen, das habe ich schon mehrfach hier erläutert. Wenn du suchen könntest, hättest du das auch leicht gefunden, z.B. hier:
http://www.c-plusplus.net/forum/p2223327#2223327KalrHeinz schrieb:
zu 3.
Habe NIE behauptet dass ich C oder C++ kann, sonst würde ich hier nicht fragen! Und in dem Fall ist meine Programmierung Streambasiert und hat Objektorientierung einen feuchten Furz zu tun!Woher weißt du, wie Objektorientierung in C++ aussieht, wenn du kein C++ "kannst"?
Argumentieren kannst du auch nicht.KalrHeinz schrieb:
zu 6.
Das hat auch nie jemand behauptet, der Prof. war allerdings bei SuSe, falls die bekannt sind... was auch nicht heißt er hat Ahnung, aber zumindest war er da sehr lange.Ich lach mit tot. Doch wohl nicht etwa:
http://www.amazon.de/product-reviews/3827322863/ref=cm_cr_pr_hist_1?ie=UTF8&filterBy=addOneStar&showViewpoints=0
Da bist du wohl einer der vielen hundert 'famos ausgebildeten' Studenten.
OK, ich entschuldige mich bei dir. Du kannst ja nichts dafür.
-
Die Dateiendung .c muss man dann aber explizit selber erstellen, wenn man neues File sonstwie dazufügt gibt es diese Option zumindest bei mir nicht.
Aber okay... Ihr habt mit der Vermischung vermutlich recht...
Sei es wie es sei, bin ja immenroch am Lernen! Und immernoch vielen Dank der guten Hilfe!
P.S. gibt es eien gute Seite, mit den Unterschieden C und C++, denn auch die genannten Zeilenkommentare sind in vielen C++ Büchern enthalten, wie z.B. Visual C++ 6 ISBN: 3-8273-1394-5 um nur eines mal genau zu nennen.