Hallo Forum
ich bin bei einem meiner Experimente auf ein Problem gestoßen, bei dem ich nicht einmal genau sagen kann, ob das Problem der Compiler oder mein Code ist. Es geht darum:
|
C-/C++-Quelltext
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
|
#include <iostream>
#include <vector>
#include <string>
using namespace std;
class weapon
{
public:
int m_item_type;
string m_weapon_name;
int m_item_id;
int m_weapon_damage;
weapon (int type = 0, string name = "", int id = 0, int damage = 0) :
m_item_type{type}, m_weapon_name{name}, m_item_id{id}, m_weapon_damage{damage}
{
cout << "Standardkonstruktor von \"weapon\" aufgerufen." << endl;
}
weapon (const weapon& wp) :
m_item_type(wp.m_item_type), m_weapon_name(wp.m_weapon_name), m_item_id(wp.m_item_id), m_weapon_damage(wp.m_weapon_damage)
{
cout << "Kopierkonstruktor von \"weapon\" aufgerufen." << endl;
}
};
int main()
{
vector<weapon> weapons;
weapons.push_back (weapon(2, "Test", 12, 125));
return 0;
}
|
Das Ganze ist im Grunde nur ein Experiment, in dem ich schauen will, wann der Kopierkonstruktor und wann ein Konstruktor aufgerufen wird. Dazu spiele ich ein wenig mit Containern.
Der Compiler gibt keine Fehlermeldungen oder Warnungen aus, sondern kompiliert anstandslos. Das daraus resultierende Programm ist allerdings 18 MB groß und nicht ausführbar.
Wenn ich der Datei manuell Ausführrechte verleihe, bekomme ich bei der Ausführung eine Fehlermeldung:
|
Quellcode
|
1
2
3
4
5
6
|
$ g++ -Wall -Wextra -pedantic -std=c++14 ./cpp-Tests/vektor_eigene_klasse.hpp -o /home/christian/Programme/c++/vektor_eigene_klasse
$ ls -lh ./Programme/c++/vektor_eigene_klasse
-rw-r--r-- 1 christian christian 18M 17. Jan 19:50 ./Programme/c++/vektor_eigene_klasse
$ chmod 777 ./Programme/c++/vektor_eigene_klasse
$ ./Programme/c++/vektor_eigene_klasse
bash: ./Programme/c++/vektor_eigene_klasse: Kann die Binärdatei nicht ausführen: Fehler im Format der Programmdatei
|
Andere Programme kompilieren ohne Probleme und lassen sich auch ausführen, also stimmt etwas mit dem Code nicht, oder ich habe einen sehr speziellen Bug gefunden.
Fällt irgendjemandem irgendetwas auf, das ich irgendwie ändern müsste?
Zu meinem Setup:
OS: Arch Linux (auf dem aktuellen Stand)
Compiler: GCC (G++)