Hi,

Why can't I do the following:

Code:
#include <stdio.h>
#include <stdlib.h>

class A {

public:
  A();
  A(char *spam);

};

A::A() {
  fprintf(stderr, "spam is good\n");
}

A::A(char *spam) {
  fprintf(stderr, "spam is %s\n", spam);
}

class B : public A {

};

int main() {

  // works                                                                      
  A *a_name;
  a_name = new A("awesome");

  // doesn't work - how do I make it work?                                                             
  B *a_name;
  a_name = new B("great");

  return 0;
}
As I get the compile error:
Code:
navi:~/projects/0_sandbox/cpp> make test_inheriance
g++ test_inheriance.cpp  -Wall -O -g -I.  -o test_inheriance
test_inheriance.cpp: In function ‘int main()’:
test_inheriance.cpp:31: error: conflicting declaration ‘B* a_name’
test_inheriance.cpp:27: error: ‘a_name’ has a previous declaration as ‘A* a_name’
test_inheriance.cpp:32: error: no matching function for call to ‘B::B(const char [6])’
test_inheriance.cpp:20: note: candidates are: B::B()
test_inheriance.cpp:20: note:                 B::B(const B&)
make: *** [test_inheriance] Error 1
Thx.