Передача const CName, поскольку этот аргумент отбрасывает квалификаторы

У меня проблемы с передачей константного класса через функцию.

 // 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;

Как только компилятор нажимает nameTwo.WriteFullName (), я получаю ошибку, оставляя квалификаторы. Я знаю, что класс является константой, но я не могу понять, как обойти это.

Функция находится в заголовочном файле, написанном так:

void    const WriteFullName(ostream& outstream = cout)
{
outstream << m_first << ' ' << m_last;
}

Я получаю эту ошибку, когда const помещается в конце заголовка функции

main.cpp:(.text+0x51): undefined reference to `CName::CName()'
main.cpp:(.text+0x7c): undefined reference to `CName::WriteFullName(std::basic_ostream<char, std::char_traits<char> >&) 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 to `CName::WriteFullName(std::basic_ostream<char, std::char_traits<char> >&) const'
main.cpp:(.text+0x133): undefined reference to `operator>>(std::basic_istream<char, std::char_traits<char> >&, CName&)'
main.cpp:(.text+0x157): undefined reference to `operator<<(std::basic_ostream<char, std::char_traits<char> >&, 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 to `operator<<(std::basic_ostream<char, std::char_traits<char> >&, 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 to `operator<<(std::basic_ostream<char, std::char_traits<char> >&, CName const&)'
main.cpp:(.text+0x347): undefined reference to `operator>>(std::basic_istream<char, std::char_traits<char> >&, CName&)'

2

Решение

Что у вас есть ошибки компоновщика, Это означает, что вы не связываетесь со всеми исходными файлами. Я предполагаю, что код для CName Класс находится в отдельном исходном файле, и вы забыли построить / связать с ним.

Редактировать: Компиляция и компоновка нескольких файлов

Чтобы сделать программу из более чем одного исходного файла, вы должны передать все исходные файлы в командной строке, например:

$ g++ main.cpp cname.cpp -o myprogram

Приведенная выше команда использует и то и другое исходные файлы и -o Опция сообщает компилятору, как назвать программу.

Вы также можете скомпилировать каждый исходный файл отдельно, а затем ссылка на сайт их вместе:

$ g++ main.cpp -c -o main.o
$ g++ cname.cpp -c -o cname.o
$ g++ main.o cname.o -o myprogram

-c Параметр указывает компилятору создать объектный файл, который впоследствии можно будет использовать для ссылки на вашу программу. Последняя команда на самом деле не будет компилировать какие-либо источники, но вместо этого использует два объектных файла для создания программы.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]