Help On Objects, Classes, and separate Compilation.

This is a discussion on Help On Objects, Classes, and separate Compilation. within the C++ Programming forums, part of the General Programming Boards category; I'm hoping someone here can help me with this situation: Code: class A { public: A(int a, int b); }; ...

  1. #1
    Registered User
    Join Date
    Apr 2013
    Posts
    7

    Help On Objects, Classes, and separate Compilation.

    I'm hoping someone here can help me with this situation:

    Code:
    class A
    {
    public:
    A(int a, int b);
    };
    I need to have an object of class A that doesn't have a default constructor in another class, B:

    Code:
    class A; //This is in a separate header file
    
    class B
    {
    private:
    A a;
    };
    The problem is that it won't compile without a default constructor. I'm not allowed to define a default constructor, and the A object in class B has to be private so I can't initialize A a in public.

    I also can't change the prototype in the interface to something like
    A(int a = 0, int b = 0);
    since one of the requirements is that if an object of class A is declared in main, it must not compile due to not having a default constructor.

    So what can I do to make class B work and compile?

    Another question I have is why is this valid:

    Code:
    class A; //#include "A.h" is in the implementation file so it compiles.
    class B
    {
    private:
    A* a;
    };
    But not this:
    Code:
    class A;
    
    class B
    {
    private:
    A a;
    };
    This is for a project that I probably won't be able to turn in on time, but I care more about how to do this right than turning it in for full points. I'll be thankful for any help given.
    Last edited by Rex Imperator; 04-09-2013 at 10:13 PM.

  2. #2
    C++ Witch laserlight's Avatar
    Join Date
    Oct 2003
    Location
    Singapore
    Posts
    22,269
    Quote Originally Posted by Rex Imperator
    So what can I do to make class B work and compile?
    Use the initialiser list of B's constructor, e.g.,
    Code:
    class B
    {
    public:
        B() : a(1, 2) {}
    private:
        A a;
    };
    Quote Originally Posted by Rex Imperator
    Another question I have is why is this valid:
    (...)
    But not this:
    You don't need the class definition to declare a pointer to an object of that class, hence a forward declaration will do. However, if you want to actually have an object of that class, then you need to know how it is defined.
    C + C++ Compiler: MinGW port of GCC
    Version Control System: Bazaar

    Look up a C++ Reference and learn How To Ask Questions The Smart Way

  3. #3
    Cat
    Cat is offline
    Registered User
    Join Date
    May 2003
    Posts
    1,571
    On why it works if you declare a pointer, but not an object - when it invokes B's constructor (even the default one), it needs to know how to create each member of B. It can create an A* easily (it creates the pointer only, which points to nothing). It can't create an A, because it doesn't know which constructor to use.

    You can create a constructor and pass an initialization list:

    Code:
    class A; //This is in a separate header file
    
    class B
    {
    public:
        B: a(0, 0)
        {
            // You can do any other constructor-related things here.
        }
    private:
        A a;
    };
    You ever try a pink golf ball, Wally? Why, the wind shear on a pink ball alone can take the head clean off a 90 pound midget at 300 yards.

  4. #4
    Cat
    Cat is offline
    Registered User
    Join Date
    May 2003
    Posts
    1,571
    Drat, beaten to the punch! I agree with what laserlight said
    You ever try a pink golf ball, Wally? Why, the wind shear on a pink ball alone can take the head clean off a 90 pound midget at 300 yards.

  5. #5
    Registered User
    Join Date
    Apr 2013
    Posts
    7
    Ah, it worked! Thank you both, =]!

    I think I need to study up on pointers. Lol.

Popular pages Recent additions subscribe to a feed

Similar Threads

  1. Initalising Objects in Separate File
    By KingTravis1986 in forum C++ Programming
    Replies: 2
    Last Post: 02-26-2012, 04:26 PM
  2. Classes & Objects [c++]
    By salmansalman in forum C++ Programming
    Replies: 6
    Last Post: 05-14-2008, 09:02 AM
  3. inputting time in separate compilation
    By sameintheend01 in forum C++ Programming
    Replies: 6
    Last Post: 03-13-2003, 04:33 AM
  4. Problem with separate compilation
    By Clyde in forum C++ Programming
    Replies: 16
    Last Post: 05-18-2002, 10:43 AM
  5. separate compilation
    By PutoAmo in forum C Programming
    Replies: 3
    Last Post: 04-02-2002, 09:29 AM

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21