получить ошибку при создании экземпляра в c ++

Заголовок файла:

class FakeMas
{
   FakeMas();
   ~FakeMas();
}

Файл CPP:

FakeMas::FakeMas(){........}
FakeMas::~FakeMas(){}

Я пишу файл cpp для проверки FakeMas:

class FakeMasTest{
    void test() 
    {
        FakeMas fakemas;            
        fakemas.start();
    }
}

классы в проекте под названием «zinc.testwebserver»

Если я его построю, это говорит

FakeMasTest.cpp:29: undefined reference to `zinc::testwebserver::FakeMas::FakeMas()'"

Если я изменю тест на:

FakeMas::FakeMas * fakemas = new FakeMas::FakeMas();

это говорит

error: ‘fakemas’ was not declared in this scope

Если я изменю тест на:

FakeMas * fakemas = new FakeMas();

это говорит

undefined reference to `zinc::testwebserver::FakeMas::FakeMas()'

Я действительно не знаю, как это сделать ...

получить какие-нибудь идеи?

благодаря

0
nl ja de
Помимо того, что вы не правильно привязываете свою реализацию, просто используйте FakeMas fakeMas; .
добавлено автор chris, источник
@ user1853170, Неопределенная ссылка означает, что она не может найти определение, которое, скорее всего, означает, что вы не связываете cpp, содержащий определения.
добавлено автор chris, источник
Пожалуйста, покажите свои компилируемые и связанные командные строки или makefile, если они есть.
добавлено автор Fred Larson, источник
Вы включаете заголовок с FakeMas в файл cpp с помощью FakeMasTest ?
добавлено автор tcb, источник
@chris Как я уже говорил выше, если я использую fakemas FakeMas, он скажет «неопределенная ссылка на« цинк :: testwebserver :: FakeMas :: FakeMas() »»
добавлено автор user1853170, источник
@tcb да, я включаю его
добавлено автор user1853170, источник

2 ответы

This sounds like a link error: the object code from FakeMas.cpp is not being linked with the object code from FakeMasTest.cpp

(они были бы FakeMas.o и FakeMasTest.o на некоторых платформах, .obj на других - вы не указали свои).

Итак, ваш код компилирует , но не может быть сформирован в исполняемый файл. Решение зависит от вашей системы сборки (которую вы еще не указали), но, по сути, сказать, что ваш исполняемый файл зависит и должен содержать оба объектных файла.


Ошибка несвязанная , потому что это неверно:

FakeMas::FakeMas * fakemas = new FakeMas::FakeMas();

должен быть:

FakeMas * fakemas = new FakeMas();

(а затем вы вернетесь к той же ошибке).


Из вашего файла Makefile:

CppUnit_Tests = fakemastest
TESTS = $(CppUnit_Tests)
testdir = $(prefix)/tests/@[email protected]/test
test_PROGRAMS = $(CppUnit_Tests)

fakemastest_SOURCES = FakeMasTest.cpp

вы указываете, что исполняемый fakemastest зависит только от FakeMasTest.cpp . Расскажите об FakeMas.cpp , изменив последнюю строку:

fakemastest_SOURCES = FakeMasTest.cpp FakeMas.cpp

(это делает определенные предположения о ваших правилах сборки, которые не показаны, но это разумное место для начала).

1
добавлено
Просто отредактируйте это в вопросе, это будет проще, чем цепочка однострочных комментариев
добавлено автор Useless, источник
Да, как я отредактировал в своем ответе. Вы также можете удалить однострочные комментарии, кстати.
добавлено автор Useless, источник
Должен ли я добавить FakeMas.cpp в fakemastest_SOURCES = FakeMasTest.cpp ???
добавлено автор user1853170, источник
Большое спасибо! Я думаю, что это проблема!
добавлено автор user1853170, источник

Похоже, что компилятор не может найти объявление FakeMas . Либо вы не добавили

#include "FakeMas.h"

или вам нужно указать правильное пространство имен:

using namespace namespace_with_FakeMas;

Сообщение компилятора показывает, что компилятор ищет объявление класса в пространстве имен zinc :: testwebserver . Кажется, что это не то же пространство имен, где был объявлен FakeMas .

0
добавлено
в этих трех файлах (FakeMas.h, FakeMas.cpp, FakeMasTest.cpp) Я все начинаю с «NS_ZINC_TESTWEBSERVER_OPEN»
добавлено автор user1853170, источник
«NS_ZINC_TESTWEBSERVER» - это пространство имен
добавлено автор user1853170, источник
pro.cxx
pro.cxx
3 049 участник(ов)

C/C++ chat 0. Простые вопросы, лабы и о IDE — в чат новичков @supapro 1. Не хамим, не переходим на личности, не вбрасываем утверждения без доказательств 2. No Ads, offtop, flood Объявления о вакансиях и евенты - в лс @AlexFails https://t.me/ProCxx/259155

supapro.cxx
supapro.cxx
1 925 участник(ов)

Чат для тех, кто немного знает C++, простые вопросы по реализации, синтаксису и ide – сюда, а для другого есть: /Главный чат по серьезным вопросам — @ProCxx /Чат по обсуждению всего — @fludpac

C++ Russia
C++ Russia
384 участник(ов)

Сообщество разработчиков C++ в Telegram.

cxx.Дискуссионная
cxx.Дискуссионная
298 участник(ов)

это не двач, общайтесь вежливо; разговор на почти любые темы; Не согласны с баном? В лс @AlexFails, @ivario

C++ для маленьких и тупых
C++ для маленьких и тупых
105 участник(ов)

Лоу левел (по среднему IQ участников) чатик ExtremeCode @extremecode Флудилка @extremecode_rest