शीर्ष लेख फ़ाइल:

#ifndef CONTMEM_H
#define CONTMEM_H

class Contmem {
public:
    Contmem(int a, int b, int c);

    int total;
    int mem;
    const int constmem;
    int printconst() const;
    const int constant;
    void print();
};

#endif // CONTMEM_H

Contmem.cpp फ़ाइल:

#include "Contmem.h"
#include <iostream> 

Contmem::Contmem(int a, int b, int c)
    : mem(a), constmem(b), constant(c)
{
    total = mem * constmem * constant;
}

void Contmem::print()
{
    std::cout << "This is my variable member " << mem << " and this is my constmem member " << constmem << "with the constant member" << constant << std::endl;  
}

int  Contmem::printconst() const
{
    return total;
    std::cout << "This is the total variable " << total << std::endl;
}

मुख्य कार्य :

#include <iostream>
#include "Contmem.h"

int main()
{
    Contmem cont(3, 4, 5);
    cont.print();
    const Contmem obj;
    obj.printconst();
}

त्रुटि फ़ाइल:

|=== Build: Debug in CONST_&_MEMBER_INITIALIZER

 (compiler: GNU GCC Compiler) ===| C:\C++

CODEBLOCK\CONST_&_MEMBER_INITIALIZER\main.cpp||

In function 'int  main()':| C:\C++

 CODEBLOCK\CONST_&_MEMBER_INITIALIZER\main.cpp|9|error: 

 no matching function for call to 'Contmem::Contmem()'| 

C:\C++  CODEBLOCK\CONST_&_MEMBER_INITIALIZER\Contmem.h|8|note: candidate:

 Contmem::Contmem(int, int, int)| C:\C++

 CODEBLOCK\CONST_&_MEMBER_INITIALIZER\Contmem.h|8|note:   candidate

 expects 3 arguments, 0 provided| C:\C++

 CODEBLOCK\CONST_&_MEMBER_INITIALIZER\Contmem.h|5|note: candidate:

 Contmem::Contmem(const Contmem&)| C:\C++

 CODEBLOCK\CONST_&_MEMBER_INITIALIZER\Contmem.h|5|note:   candidate

 expects 1 argument, 0 provided| ||=== Build failed: 1 error(s), 0

 warning(s) (0 minute(s), 0 second(s)) ===|
c++
-1
Allaye 23 मई 2018, 18:22

2 जवाब

सबसे बढ़िया उत्तर
const Contmem obj;

डिफ़ॉल्ट कंस्ट्रक्टर, Contmem() को कॉल करने का प्रयास करता है।

लेकिन के कारण:

Contmem::Contmem(int a, int b, int c)
    : mem(a), constmem(b), constant(c)

जिसमें एक मेम-इनिशियलाइज़र और एक const सदस्य है, आपका डिफ़ॉल्ट कंस्ट्रक्टर है हटाया गया.

इस प्रकार, कंपाइलर उस कथन को किसी भी मौजूदा कंस्ट्रक्टर से मेल नहीं खा सकता है, क्योंकि केवल आपका मेम-इनिशियलाइज़र कंस्ट्रक्टर मौजूद है।

5
Joseph D. 23 मई 2018, 19:03

आप अपनी कक्षा के लिए एक डिफ़ॉल्ट कंस्ट्रक्टर खो रहे हैं। आपके पास केवल यही है

Contmem::Contmem(int a, int b, int c)
    : mem(a), constmem(b), constant(c)
{
    total = mem * constmem * constant;
}

लेकिन यहाँ

int main()
{
    Contmem cont(3, 4, 5);
    cont.print();
    const Contmem obj; // <--here
    obj.printconst();
}

आप उन 3 तर्कों को पारित किए बिना एक नई Contmem वस्तु बनाने की कोशिश कर रहे हैं


दरअसल, वे कंपाइलर त्रुटियां आपको बता रही हैं कि असली समस्या क्या है।

6
alseether 8 मार्च 2019, 10:30