Я вижу следующие ошибки, сообщаемые линкером при попытке скомпилировать код ниже: < /p>
g++ -pedantic-errors -Wall -Wextra -Werror -std=c++17 -o -L/usr/lib -lstdc++ -lm -I
< /code>
/usr/bin/ld: /mnt/c/Users/AhmedRahim/workspace/repos/RvBaseLib/build/objects//mnt/c/Users/AhmedRahim/workspace/repos/RvBaseLib/source/main/RvBaseUInt64Property.o: in function `RvBaseUInt64Property::RvBaseUInt64Property(std::__cxx11::basic_string, unsigned long)':
RvBaseUInt64Property.cpp:(.text+0x4e): undefined reference to `RvBaseProperty::RvBaseProperty(std::__cxx11::basic_string, unsigned long)'
/usr/bin/ld: /mnt/c/Users/AhmedRahim/workspace/repos/RvBaseLib/build/objects//mnt/c/Users/AhmedRahim/workspace/repos/RvBaseLib/source/main/RvBaseUInt64Property.o: in function `RvBaseUInt64Property::~RvBaseUInt64Property()':
RvBaseUInt64Property.cpp:(.text+0xc6): undefined reference to `RvBaseProperty::~RvBaseProperty()'
/usr/bin/ld: /mnt/c/Users/AhmedRahim/workspace/repos/RvBaseLib/build/objects//mnt/c/Users/AhmedRahim/workspace/repos/RvBaseLib/source/tests/sanity_tests/sanity.o: in function `main':
sanity.cpp:(.text+0x84): undefined reference to `RvBaseProperty::Print() const'
collect2: error: ld returned 1 exit status
< /code>
Насколько мне известно, не должно быть никаких проблем, касающихся наследования от шаблонного класса по состоянию на C ++ 17. Я не уверен, что здесь идет не так. Кто-нибудь может помочь?template class RvBaseProperty
{
private :
string mName {"Undefined"};
T mValue;
bool mValid {false};
static uint64_t mBasePropertyRefCount;
public :
explicit RvBaseProperty(string _name, T _value);
~RvBaseProperty();
...
void Print() const;
};
< /code>
rvbaseproperty.cpp-только соответствующие детали, показанные.#include "RvBaseProperty.h"
using namespace std;
template uint64_t RvBaseProperty::mBasePropertyRefCount = 0;
// ========================================================================
template RvBaseProperty::RvBaseProperty(
string _name,
T _value) :
mName (_name),
mValue (_value)
// ========================================================================
{
SetValid();
++mBasePropertyRefCount;
}
// ========================================================================
template RvBaseProperty::~RvBaseProperty()
// ========================================================================
{
--mBasePropertyRefCount;
}
< /code>
baseuint64property.h
#include "RvBaseProperty.h"
class RvBaseUInt64Property : public RvBaseProperty
{
public:
explicit RvBaseUInt64Property(string _name, uint64_t _value);
~RvBaseUInt64Property();
};
< /code>
baseuint64property.cpp
#include "RvBaseUInt64Property.h"
// ========================================================================
RvBaseUInt64Property::RvBaseUInt64Property(
string _name,
uint64_t _value) :
RvBaseProperty::RvBaseProperty(_name, _value)
// ========================================================================
{}
// ========================================================================
RvBaseUInt64Property::~RvBaseUInt64Property()
// ========================================================================
{}
< /code>
main (): < /p>
RvBaseUInt64Property const * prop0 = new RvBaseUInt64Property("uint64_t", 99);
prop0->Print();
Подробнее здесь: https://stackoverflow.com/questions/797 ... base-class
Ошибки линкера при наследстве от шаблонного базового класса [дублировать] ⇐ C++
Программы на C++. Форум разработчиков
1754462854
Anonymous
Я вижу следующие ошибки, сообщаемые линкером при попытке скомпилировать код ниже: < /p>
g++ -pedantic-errors -Wall -Wextra -Werror -std=c++17 -o -L/usr/lib -lstdc++ -lm -I
< /code>
/usr/bin/ld: /mnt/c/Users/AhmedRahim/workspace/repos/RvBaseLib/build/objects//mnt/c/Users/AhmedRahim/workspace/repos/RvBaseLib/source/main/RvBaseUInt64Property.o: in function `RvBaseUInt64Property::RvBaseUInt64Property(std::__cxx11::basic_string, unsigned long)':
RvBaseUInt64Property.cpp:(.text+0x4e): undefined reference to `RvBaseProperty::RvBaseProperty(std::__cxx11::basic_string, unsigned long)'
/usr/bin/ld: /mnt/c/Users/AhmedRahim/workspace/repos/RvBaseLib/build/objects//mnt/c/Users/AhmedRahim/workspace/repos/RvBaseLib/source/main/RvBaseUInt64Property.o: in function `RvBaseUInt64Property::~RvBaseUInt64Property()':
RvBaseUInt64Property.cpp:(.text+0xc6): undefined reference to `RvBaseProperty::~RvBaseProperty()'
/usr/bin/ld: /mnt/c/Users/AhmedRahim/workspace/repos/RvBaseLib/build/objects//mnt/c/Users/AhmedRahim/workspace/repos/RvBaseLib/source/tests/sanity_tests/sanity.o: in function `main':
sanity.cpp:(.text+0x84): undefined reference to `RvBaseProperty::Print() const'
collect2: error: ld returned 1 exit status
< /code>
Насколько мне известно, не должно быть никаких проблем, касающихся наследования от шаблонного класса по состоянию на C ++ 17. Я не уверен, что здесь идет не так. Кто-нибудь может помочь?template class RvBaseProperty
{
private :
string mName {"Undefined"};
T mValue;
bool mValid {false};
static uint64_t mBasePropertyRefCount;
public :
explicit RvBaseProperty(string _name, T _value);
~RvBaseProperty();
...
void Print() const;
};
< /code>
rvbaseproperty.cpp-только соответствующие детали, показанные.#include "RvBaseProperty.h"
using namespace std;
template uint64_t RvBaseProperty::mBasePropertyRefCount = 0;
// ========================================================================
template RvBaseProperty::RvBaseProperty(
string _name,
T _value) :
mName (_name),
mValue (_value)
// ========================================================================
{
SetValid();
++mBasePropertyRefCount;
}
// ========================================================================
template RvBaseProperty::~RvBaseProperty()
// ========================================================================
{
--mBasePropertyRefCount;
}
< /code>
baseuint64property.h
#include "RvBaseProperty.h"
class RvBaseUInt64Property : public RvBaseProperty
{
public:
explicit RvBaseUInt64Property(string _name, uint64_t _value);
~RvBaseUInt64Property();
};
< /code>
baseuint64property.cpp
#include "RvBaseUInt64Property.h"
// ========================================================================
RvBaseUInt64Property::RvBaseUInt64Property(
string _name,
uint64_t _value) :
RvBaseProperty::RvBaseProperty(_name, _value)
// ========================================================================
{}
// ========================================================================
RvBaseUInt64Property::~RvBaseUInt64Property()
// ========================================================================
{}
< /code>
main (): < /p>
RvBaseUInt64Property const * prop0 = new RvBaseUInt64Property("uint64_t", 99);
prop0->Print();
Подробнее здесь: [url]https://stackoverflow.com/questions/79726648/linker-errors-when-inheriting-from-templated-base-class[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия