Невозможно понять, почему возникает ошибка сегментации при доступе к элементам const из внутреннего класса.
Программа:
#include <iostream>
#include <string>
#include <unordered_map>
using namespace std;
typedef struct
{
double a;
double b;
} conf;
class configuration
{
public:
configuration(const conf *conf) : conf_(conf) {}
double
getA() const
{
return conf_->a;
}
double
getB() const
{
return conf_->b;
}
private:
const conf *conf_;
};
class Test
{
private:
class TestInner
{
public:
TestInner(const configuration *conf) : conf_(conf) {}
void
print()
{
cout << "INNER START\n";
cout << "Innerclass data: a : " << conf_->getA()
<< "b : " << conf_->getB() << "\n";
cout << "INNER END\n";
}
private:
const configuration *conf_;
};
private:
const configuration *conf_;
typedef std::unordered_map<std::string, TestInner *> TestInners;
TestInners testInners_;
const std::string key_;
public:
Test(const configuration *conf);
void
print();
};
Test::Test(const configuration *conf) : conf_(conf), key_("ABC")
{
TestInner testInner_(conf);
testInners_.insert(std::pair<std::string, TestInner *>(key_, &testInner_));
}
void
Test::print()
{
cout << "Test data: a : " << conf_->getA() << "b : " << conf_->getB()
<< "\n";
TestInners::const_iterator testInner = testInners_.find(key_);
testInner->second->print();
}
int
main()
{
conf conf_;
conf_.a = 10;
conf_.b = 10;
configuration configuration_(&conf_);
Test test(&configuration_);
test.print();
cout << "Hello World";
return 0;
}
Вывод:
Тестовые данные: a:10b: 10
INNER START
Ошибка сегментации (ядро сброшено)
Кажется, это зависит от компилятора,
1.On g ++ (GCC) 4.4.6 20110731 (Red Hat 4.4.6-3)
Output:
Test data: a : 10b : 10
INNER START
Innerclass data: a : 3.15654e-317b : 6.95271e-310
INNER END
Hello World%
2.На Apple LLVM версия 9.0.0 (clang-900.0.39.2)
Output:
Test data: a : 10b : 10
INNER START
Innerclass data: a : 10b : 10
INNER END
Hello World
ошибка сегментации в x86_64-pc-linux-gnu-g ++ (GCC) 7.4.0