Passing const CName as this argument discards qualifiers
- by Geno Diaz
I'm having trouble with passing a constant class through a function.
// test the constructors
auto CName nameOne("Robert", "Bresson");
const CName nameTwo = nameOne;
auto CName nameThree;
// display the contents of each newly-constructed object...
// should see "Robert Bresson"
cout << "nameOne = ";
nameOne.WriteFullName();
cout << endl;
// should see "Robert Bresson" again
cout << "nameTwo = ";
nameTwo.WriteFullName();
cout << endl;
As soon as the compiler hits nameTwo.WriteFullName() I get the error of abandoning qualifiers. I know that the class is a constant however I can't figure out how to work around it.
The function is in a header file written as so:
void const WriteFullName(ostream& outstream = cout)
{
outstream << m_first << ' ' << m_last;
}
I receive this error when const is put in back of the function header
main.cpp:(.text+0x51): undefined reference to CName::CName()'
main.cpp:(.text+0x7c): undefined reference toCName::WriteFullName(std::basic_ostream &) const'
main.cpp:(.text+0xbb): undefined reference to CName::WriteFullName(std::basic_ostream<char, std::char_traits<char> >&) const'
main.cpp:(.text+0xf7): undefined reference toCName::WriteFullName(std::basic_ostream &) const'
main.cpp:(.text+0x133): undefined reference to operator>>(std::basic_istream<char, std::char_traits<char> >&, CName&)'
main.cpp:(.text+0x157): undefined reference tooperator<<(std::basic_ostream &, CName const&)'
main.cpp:(.text+0x1f4): undefined reference to operator<<(std::basic_ostream<char, std::char_traits<char> >&, CName const&)'
main.cpp:(.text+0x22b): undefined reference tooperator<<(std::basic_ostream &, CName const&)'
main.cpp:(.text+0x25f): undefined reference to operator<<(std::basic_ostream<char, std::char_traits<char> >&, CName const&)'
main.cpp:(.text+0x320): undefined reference tooperator<<(std::basic_ostream &, CName const&)'
main.cpp:(.text+0x347): undefined reference to `operator(std::basic_istream &, CName&)'