Ошибки линкера при наследстве от шаблонного базового класса [дублировать]C++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Anonymous
 Ошибки линкера при наследстве от шаблонного базового класса [дублировать]

Сообщение 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();


Подробнее здесь: https://stackoverflow.com/questions/797 ... base-class
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C++»