Я вижу следующие ошибки, сообщаемые линкером при попытке скомпилировать код ниже: < /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++
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Как скрыть метод базового класса из производного класса при вызове внутри базового класса?
Anonymous » » в форуме C# - 0 Ответы
- 58 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Как скрыть метод базового класса из производного класса при вызове внутри базового класса?
Anonymous » » в форуме C# - 0 Ответы
- 46 Просмотры
-
Последнее сообщение Anonymous
-