mboost-dp1
C++ Class Templates
- Forside
- ⟨
- Forum
- ⟨
- Programmering
Jeg satte mig for at kigge på C++ "Generics", men er løbet ind i et underligt problem.
'DataStructures::Graph::Node' : use of class template requires template argument list
Er der nogen som kan forklare meningen med det?
Node.cpp
Node.h
'DataStructures::Graph::Node' : use of class template requires template argument list
Er der nogen som kan forklare meningen med det?
Node.cpp
#include "stdafx.h"
#include "Node.h"
namespace DataStructures
{
namespace Graph
{
template <typename TValue> Node::Node(TValue value)
{
_value = value;
}
template <typename TValue> TValue getValue()
{
return _value;
}
}
}
Node.h
#include "stdafx.h"
namespace DataStructures
{
namespace Graph
{
// Generic Graph Node class.
template <typename TValue>
class Node
{
private:
TValue _value;
public:
// Constructs a new Graph Node with the given value.
Node(TValue value);
// Return the Node Value
TValue getValue();
};
}
}
Ok, har fået løst problemet. Det lader til at C++ kræver at man definere alt funktionalitet i header filen, medmindre man eksplicit vil definere alle typer ens template kan benytte manuelt!
Jeg har lidt lyst til at bonke den person som sagde at det var ligeså simpelt som C# og Java, lidt i hovedet :p
Jeg har lidt lyst til at bonke den person som sagde at det var ligeså simpelt som C# og Java, lidt i hovedet :p
#include "stdafx.h"
namespace DataStructures
{
namespace Graph
{
// Generic Graph Node class.
template <typename TValue>
class Node
{
private:
TValue _value;
public:
// Constructs a new Graph Node with the given value.
Node(TValue value);
// Return the Node Value
TValue getValue();
};
template <typename TValue> Node<TValue>::Node(TValue value)
{
_value = value;
}
template <typename TValue> TValue Node<TValue>::getValue()
{
return _value;
}
}
}
#1-2
C++ templates er beregnet til at blive defineret i header filer og bliver så compilet ind når du oversætter din .cpp fil.
Det gør det jo ikke svært bare anderledes end Java/C#.
Og på nogle områder er det faktisk nemmere. Det er f.eks. lige ud af landevejen at lave en template som bruger operatorer .
Der er selvfølgelig også ting som er vanskelige. C++ er ikke et nemt sprog.
C++ templates er beregnet til at blive defineret i header filer og bliver så compilet ind når du oversætter din .cpp fil.
Det gør det jo ikke svært bare anderledes end Java/C#.
Og på nogle områder er det faktisk nemmere. Det er f.eks. lige ud af landevejen at lave en template som bruger operatorer .
Der er selvfølgelig også ting som er vanskelige. C++ er ikke et nemt sprog.
Det jeg synes var besværligt var alt den redundans der er, som gav en masse linker errors indtil jeg fik lært hvordan det skal gøres.
F.eks. synes jeg at dette her er helt overdrevent
Jeg er så glad for at man kan sætte det op inline istedet, dvs.
F.eks. synes jeg at dette her er helt overdrevent
template <typename TValue> Node<TValue>::Node(TValue value)
Jeg er så glad for at man kan sætte det op inline istedet, dvs.
#include "stdafx.h"
namespace DataStructures
{
namespace Graph
{
// Generic Graph Node class.
template <typename TValue>
class Node
{
private:
TValue _value;
public:
// Constructs a new Graph Node with the given value.
Node(TValue value)
{
_value = value;
}
// Return the Node Value
TValue getValue()
{
return _value;
}
};
}
}
Gå til top
Opret dig som bruger i dag
Det er gratis, og du binder dig ikke til noget.
Når du er oprettet som bruger, får du adgang til en lang række af sidens andre muligheder, såsom at udforme siden efter eget ønske og deltage i diskussionerne.