Pairs & Constructors

This is a discussion on Pairs & Constructors within the C++ Programming forums, part of the General Programming Boards category; Code: class MyClass{ public: MyClass(int MyInt,char MyChar){i=MyInt;c=MyChar;} ~MyClass(){}; private: int i; char c; }; MyClass doesn't have an explicit default ...

  1. #1
    Registered User
    Join Date
    Feb 2004
    Posts
    15

    Pairs & Constructors

    Code:
    class MyClass{
    	public:
    		MyClass(int MyInt,char MyChar){i=MyInt;c=MyChar;}
    		~MyClass(){};
    	private:
    		int i;
    		char c;
    };
    MyClass doesn't have an explicit default constructor. Say I want to create a pair of MyClasses, e.g. pair<MyClass,MyClass> tmp;, I (understandably) get the message,
    Code:
    error: no matching function for call to 'MyClass::MyClass()'
    However, I cannot figure out how to call my constructor – if indeed I can in such a situation. Do I have to create a default constructor and initialise the values later? Or alternatively, create instances of MyClass that I bind together in a pair? e.g.
    Code:
    MyClass t1(1,'a'),t2(1,'a');
    pair<MyClass,MyClass>tmp(t1,t2);
    I guess my real question is: Is there no way of calling a constructor with arguments when using pair?

  2. #2
    C++ Witch laserlight's Avatar
    Join Date
    Oct 2003
    Location
    Singapore
    Posts
    19,384
    You might be able to use:
    Code:
    std::make_pair(MyClass(1, 'a'), MyClass(1, 'a'));
    But in your case perhaps this would suffice:
    Code:
    std::pair<MyClass, MyClass> tmp(MyClass(1, 'a'), MyClass(1, 'a'));
    Last edited by laserlight; 04-04-2006 at 09:17 AM.
    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
    Registered User
    Join Date
    Feb 2004
    Posts
    15
    The latter is exactly what I wanted. Thanks, laserlight!

  4. #4
    Registered User hk_mp5kpdw's Avatar
    Join Date
    Jan 2002
    Location
    Northern Virginia/Washington DC Metropolitan Area
    Posts
    3,673
    Quote Originally Posted by Nereus
    I guess my real question is: Is there no way of calling a constructor with arguments when using pair?
    You could make your constructor (the one with arguments) accept default values for those arguments, the constructor will then work as a default constructor:
    Code:
    class MyClass{
        public:
            MyClass(int MyInt = 1,char MyChar = 'a'){i=MyInt;c=MyChar;}
            ~MyClass(){};
        private:
            int i;
            char c;
    };
    I used to be an adventurer like you... then I took an arrow to the knee.

Popular pages Recent additions subscribe to a feed

Similar Threads

  1. Problem aligning floating point numbers
    By esbo in forum C Programming
    Replies: 4
    Last Post: 01-05-2009, 07:09 PM
  2. Copy constructors; Best practices (and private)
    By Mario F. in forum C++ Programming
    Replies: 15
    Last Post: 06-23-2006, 04:42 PM
  3. Arrays and Constructors
    By Verdagon in forum C++ Programming
    Replies: 1
    Last Post: 07-20-2005, 07:20 PM
  4. constructors, arrays, and new
    By Thantos in forum C++ Programming
    Replies: 6
    Last Post: 05-30-2004, 06:21 PM
  5. Copy constructors and private constructors
    By Eibro in forum C++ Programming
    Replies: 5
    Last Post: 11-24-2002, 09:16 AM

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