type t (* void *)

ソフトウエアのこととか

C++: 本日のハマり

class A {
public:
  int id = 0;
};

class B : public A {
public:
  B() : id(100) {}
};

これエラーになる。この辺よくわかってなかった。

hoge.cpp: In constructor ‘B::B()’:
hoge.cpp:7:9: error: class ‘B’ does not have any field named ‘id’
   B() : id(100) {}
         ^

B() : id(100) {}はダメなのでB() { id = 100 }でOKだった。よく分からんね。 本題はここから。以下のようなプログラムはAと出力する。

#include <iostream>

class A {
public:
  std::string s = "A";
  A();
  virtual ~A();
};


A::A(){}
A::~A(){}

class B : public A {
public:
  std::string s = "B";
  B() : s("hoge") {}
  ~B() override = default;
};

int main () {
  A a = B();
  std::cout << a.s;
  return 0;
}

気づくのに1時間くらいかかってしまった。