Ich versuche eine globale Instanz einer Klasse zu erstellen, deren Konstruktor auf eine globale Variable verweist.C++ - Programmabsturz beim Erstellen einer globalen Instanz der Klasse, deren Konstruktor auf eine globale Variable verweist
Das Programm kompiliert ohne Fehler. Aber wenn es ausgeführt wird, stürzt es auf der Referenz der globalen Variablen ab.
Wie erstelle ich eine globale Instanz dieser Klasse, ohne dass der Konstruktor abstürzt? Hier
ist die SSCCE, die ich gemacht:
/* main.cpp */
#include "TestClass.h"
// I need a global instance of TestClass
TestClass j;
int main()
{
return 0;
}
-
/* C.h */
#ifndef C_H_INCLUDED
#define C_H_INCLUDED
#include <string>
// global
extern const std::string S;
#endif // C_H_INCLUDED
-
/* C.cpp */
#include "C.h"
#include <string>
// extern definition of global
const std::string S = "global string data";
-
/* TestClass.h */
#ifndef TESTCLASS_H_INCLUDED
#define TESTCLASS_H_INCLUDED
class TestClass
{
public:
TestClass();
};
#endif // TESTCLASS_H_INCLUDED
-
/* TestClass.cpp */
#include "TestClass.h"
#include <iostream>
#include "C.h" // for S global
TestClass::TestClass()
{
std::cout << S << std::endl; // this line crashes the program
}
Debugger Meldungen über Absturz:
Program received signal SIGSEGV, Segmentation fault.
In std::basic_ostream<char, std::char_traits<char> >& std::operator<< <char, std::char_traits<char>, std::allocator<char> >(std::basic_ostream<char, std::char_traits<char> >&, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)()()
#1 0x004014f9 in TestClass::TestClass (this=0x4a0024 <j>) at E:\cpp\externconsttest\TestClass.cpp:9
E:\cpp\externconsttest\TestClass.cpp:9:117:beg:0x4014f9
At E:\cpp\externconsttest\TestClass.cpp:9
#1 0x004014f9 in TestClass::TestClass (this=0x4a0024 <j>) at E:\cpp\externconsttest\TestClass.cpp:9
E:\cpp\externconsttest\TestClass.cpp:9:117:beg:0x4014f9
Dieses Beispiel in Operator stürzt < <, aber es stürzt auf jeden Bezug auf S egal wie es referenziert wird.
Es würde viel helfen, wenn Sie die tatsächliche Ausnahme enthalten würden. –
[Statische Initialisierung Reihenfolge Fiasko?] (Http://isocpp.org/wiki/faq/ctors#static-init-order) –