Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

Typ

Frischling

  • »Typ« ist der Autor dieses Themas
  • Private Nachricht senden

1

13.03.2016, 10:31

Linkerfehler beim öffnen einer Datei

Hallo,
ich möchte einfach nur eine .txt Datei öffnen und den Inhalt ausgeben. Allerdings kommen dabei folgende Fehler:

Quellcode

1
Fehler  LNK2019:         Verweis auf nicht aufgelöstes externes Symbol "_WinMain@16" in Funktion ""int __cdecl invoke_main(void)" (?invoke_main@@YAHXZ)".

Quellcode

1
Fehler  LNK1120:        1 nicht aufgelöste externe


Und mein Code:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <iostream>
#include <fstream>
#include <string>

using namespace std;

int main()
{
    // Variablen
    std::string wert;               // hier wird der string aus der Datei gespeichert
    
    ifstream Input("D:/Programmierung/C++/Programms/games/Arduino - SDL/processing/meineDaten.txt", ios::binary);   
    Input.read((char*)&wert, sizeof(wert));
    std::cout << "Aktuelle Position: " << wert << std::endl;        // ausgeben
    Input.close();

    return 0;
}


Noch einige Infos:
Ich habe mit Processing einen Integer Wert in einen String konvertiert, und dann in "meineDaten.txt" gespeichert. Vielleicht macht das irgendwie Probleme.
Ich hoffe dass mir jemand helfen kann.

Mfg
Typ

2

13.03.2016, 10:47

Kann es sein, dass du statt einem leeren C++Projekt ein Windows Forms projekt angelegt hast? Ich meine dabei trat immer dieser Fehler auf, da er dann die main-Funktion anders heißt.

PS: Habe es eben mal ausprobiert, bei mir lässt sich der Quellcode bauen.

Typ

Frischling

  • »Typ« ist der Autor dieses Themas
  • Private Nachricht senden

3

13.03.2016, 11:11

Zitat

Kann es sein, dass du statt einem leeren C++Projekt ein Windows Forms projekt angelegt hast? Ich meine dabei trat immer dieser Fehler auf, da er dann die main-Funktion anders heißt.

Stimmt, war irgendeine andere Projektart, jetzt funktioniert es. Vielen Dank!

Der Linker Fehler ist jetzt weg, allerdings habe ich jetzt ein neues Problem:
Wenn ich "wert" als String deklariere, wird in der Konsole nur "Aktuelle Position: " angezeigt und dann stürzt das Programm ab. Wenn ich "wert" jetzt als Integer deklariere, dann wird "Aktuelle Position: -869191627" angezeigt.

Ich habe keine Ahnung wie ich das lösen kann, geschweige denn wieso das so ist?
Kann es sein, dass ich den Wert irgendwie anders aus der Datei wieder herausholen muss? Weil er ja von einem anderen Programm reingespeichert wurde?

Wäre toll wenn mir da noch jemand helfen könnte

Mfg
Typ

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Typ« (13.03.2016, 11:20) aus folgendem Grund: Aus Prinzip


Nimelrian

Alter Hase

Beiträge: 1 216

Beruf: Softwareentwickler (aktuell Web/Node); Freiberuflicher Google Proxy

  • Private Nachricht senden

4

13.03.2016, 11:16

C-/C++-Quelltext

1
Input.read((char*)&wert, sizeof(wert));

Du weißt auch ganz genau, was du da tust?
Ich bin kein UserSideGoogleProxy. Und nein, dieses Forum ist kein UserSideGoogleProxyAbstractFactorySingleton.

Typ

Frischling

  • »Typ« ist der Autor dieses Themas
  • Private Nachricht senden

5

13.03.2016, 11:26

C-/C++-Quelltext

1
Input.read((char*)&wert, sizeof(wert));

Du weißt auch ganz genau, was du da tust?


So halb, ich les damit halt den Inhalt der Datei, die ich vorher unter dem Namen "Input" gespeichert(?) hab, speichere den Inhalt in "wert" und was das mit der größe von "wert" soll weiß ich nicht. Vielleicht wird da irgendwie... ne, Keine Ahnung.
Ich habs aus nem Beispiel kopiert, da hats auch funktioniert, aber bei dem Beispiel wurde die Zahl auch als Integer drin gespeichert, und nicht als String.

Typ

Frischling

  • »Typ« ist der Autor dieses Themas
  • Private Nachricht senden

6

13.03.2016, 11:46

Funktioniert mit char

Hallo,
wenn ich "wert" als char deklariere funktioniert es, allerdings wird dann logischerweise nur die 1. Ziffer des Inhalts in "wert" gespeichert. Der Inhalt ist aber 3 Ziffern lang. Wie kann ich das Problem am besten lösen?

Mfg
Typ

7

13.03.2016, 12:30

Du lädst die Datei binary, hast sie aber anscheined als Text gespeichert!? Kannst du den Wert in der Textdatei beim öffnen lesen?

Und schau dir mal an was es außer binary noch gibt.
Wer aufhört besser werden zu wollen hört auf gut zu sein!

aktuelles Projekt:Rickety Racquet

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

8

13.03.2016, 13:37

Du hattest wohl eine Win32 Anwendung statt einer Win32 Konsolenanwendung erstellt...

Das Problem ist, dass du nicht einfach so bit-für-bit einen std::string in eine Datei packen und dann hoffen kannst, dass du den einfach so wiederherstellen kannst. Ein std::string enthält in der Regel effektiv nicht deinen Text direkt, sondern verwaltet nur einen Pointer auf einen Speicherbereich, wo der eigentliche Text gehalten wird (zumindest kannst du dir das so vorstellen, die genaue Implementierung hängt natürlich von der konkret von dir verwendeten Implementierung der Standardlibrary ab). Wenn du den std::string nun einfach so in eine Datei schreibst, schreibst du effektiv nur die Adresse in die Datei, an dem sich in dem Moment gerade zufälligerweise der Text aufhält. Wenn du diesen dann später, insbesondere in einer neuen Instanz des Programmes, einfach einen bestehenden std::string mit den Bits aus der Datei überschreibst (das ist effektiv, was du da tust), dann ist das erstens Undefiniertes Verhalten und zweitens wird das in der Regel zu einem Memory Leak führen und crashen, weil du dem std::string nun effektiv seinen eigentlichen Pointer weggenommen und durch einen längst ungültigen Pointer ersetzt hast...

Eine Lösung ist z.B., nicht einfach die Bits des std::string Objektes in die Datei zu schreiben, sondern die Länge und dann die entsprechende Anzahl an Zeichen aus dem String in die Datei zu schreiben...

Typ

Frischling

  • »Typ« ist der Autor dieses Themas
  • Private Nachricht senden

9

13.03.2016, 13:48

@Koschi: Ja, wenn ich die Datei öffne kann ich die Zahl lesen. Ich hab jetzt mal ios::binary durch ios::dec ersetzt, aber das funktioniert auch nicht.

@dot: Klingt einleuchtend, aber wie kann ich da korrekt umsetzten?

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

10

13.03.2016, 14:01

@dot: Klingt einleuchtend, aber wie kann ich da korrekt umsetzten?

Eine Lösung ist z.B., nicht einfach die Bits des std::string Objektes in die Datei zu schreiben, sondern die Länge und dann die entsprechende Anzahl an Zeichen aus dem String in die Datei zu schreiben...

Woran genau scheitert's mit der Umsetzung?

Werbeanzeige