Я начинающий на C++, следующий примерный код очень прост, но я получаю загадочную ошибку. Field has incomplete type "ItemType"
C++ шаблон «Поле имеет неполный тип»
Код от абстракции данных & Устранение неполадок с C++ Франком Carrano. Pg. 32 - 33, стр. 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
EDIT: Оказывается, я должен удалить .cpp-файл формирует проект Xcode и удаляет #include
в .cpp-файле.
не связана с реальной проблемой, но '__PlainBox__PlainBox__' является зарезервированным идентификатором, и вы не должны действительно включать' stdio.h' в коде C++. Какую команду вы используете для компиляции этого кода? И вставьте полный набор сообщений об ошибках компилятора. –
Когда вы получите эту ошибку? Скомпилирует ли приведенный выше код ошибку или вам нужно использовать шаблон класса для получения ошибки. BTW, если это код, скопированный из книги, предназначенной для обучения вам C++, я бы рекомендовал вам получить другую книгу: он содержит несколько более или менее серьезных проблем, которые вы хотите избежать в реальном коде. Например, при создании экземпляра со встроенным типом 'item' не инициализируется в конструкторе, другой конструктор без необходимости сначала строит' item' только для его назначения, он использует зарезервированные имена и, на мой взгляд, использует '' редко имеет место на C++. –
Я компилирую этот код на Xcode, command + R. Я получаю эту ошибку, как только я ее набрал. Xcode показывает красный флаг на этой строке. – tomtom