C ++模板"字段类型不完整"

时间:2014-09-25 21:56:14

标签: c++ xcode templates

我是C ++的初学者,以下示例代码非常简单,但我遇到了一个令人费解的错误。 Field has incomplete type "ItemType" Error

代码来自Data Abstraction& Frank Carrano用C ++解决问题。 PG。 32 - 33,Pg。 37

我在Xcode 6.0 (6A267n)

上使用OSX Yosemite Beta 10.10

在头文件(Listing C1-03

/** @file PlainBox.h */

#ifndef __PlainBox__
#define __PlainBox__

//Indicates this is a template definition
template<class ItemType>
// Declaration for the class PlainBox
class PlainBox
{
private:
    // Data field
    ItemType item; //error here
public:
    // Default constructor
    PlainBox();

    // Paramerized constructor
    PlainBox(const ItemType& theItem);

    // Method to change the value of the data field
    void setItem(const ItemType& theItem);

    // Method to return item form the data field
    ItemType getItem() const;

};  // end PlainBox
#include "PlainBox.cpp"
#endif /* defined(__PlainBox__PlainBox__) */

在cpp文件(listing C1-04

/** @file PlainBox.cpp */
#include "PlainBox.h"
template<class ItemType>
PlainBox <ItemType> :: PlainBox ()
{
}   //end default constructor
template<class ItemType>
PlainBox <ItemType> ::PlainBox(const ItemType& theItem)
{
    item = theItem;
}   //end constructor
template<class ItemType>
void PlainBox <ItemType> ::setItem(const ItemType &theItem)
{
    item = theItem;
}   //end setItem
template<class ItemType>
ItemType PlainBox <ItemType> ::getItem() const
{
    return item;
}   //end getItem

编辑:结果我必须从Xcode项目中删除.cpp文件并删除.cpp文件中的#include

Xcode drop down menu Remove Reference

1 个答案:

答案 0 :(得分:0)

link让我相信你应该尝试将所有内容放入标题中。虽然other线程甚至连文章说不然,但值得一试。

此外,这听起来很愚蠢,但尝试将模板关键字直接移到class关键字之前(取出注释行)。使用g ++编译器并不重要,但我知道有些vcc版本对此很挑剔,甚至可能是LLVM。像

这样的东西
template <typename T>
class myclass{
}

甚至

template <typename T> class myclass{
}