簡體   English   中英

C ++模板定義導致類型名稱未知

[英]C++ template definition results in unknown type name

我正在學習C ++中的模板。 在MyClass.h中:

template <class valueType>
void valueToMap(const std::string key, const valueType value);

在MyClass.cpp中:

void MyClass::valueToMap(const std::string key, const valueType value) // error
                                                      ^
{
    _map[key] = std::to_string(value);
}

錯誤是:未知類型名稱'valueType'我包含了頭文件,那么我在做什么錯呢?

盡管如此,它仍必須是模板

template <typename valueType>
void MyClass<valueType>::valueToMap(const std::string key, const valueType value) // error
                                                      ^
{
    _map[key] = std::to_string(value);
}

但是請記住:

為什么只能在頭文件中實現模板?

您需要在聲明和定義期間重復模板:

template <class valueType>
void MyClass::valueToMap(const std::string key, const valueType value)
{
    _map[key] = std::to_string(value);
}

您應該添加

template <class valueType>

在方法實施和更改之前

void MyClass:: ...

void MyClass<valueType>:: ...

處理模板時,不能將類聲明和類實現分離到單獨的文件中(至少不要在.h文件末尾包含.cpp文件)。 這是由於模板的編譯方式。

做您想做的最簡單的方法是內聯函數:

template <class valueType> // assuming this is also at the class level
void valueToMap(const std::string key, const valueType value)
{
    _map[key] = std::to_string(value);
}

或將實現放在類聲明后的頭文件中:

template<class valueType>
class MyClass
{
public:
    void valueToMap(const std::string key, const valueType value);
};

template<class valueType>
void MyClass<valueType>::valueToMap(const std::string key, const valueType value)
{
    _map[key] = std::to_string(value);
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM