【发布时间】:2011-10-15 14:36:26
【问题描述】:
编译时出现这些错误。我找不到错误。特别是为什么需要; 以及为什么已经定义了功能模板。我正在使用 Visual Studio 2010。这适用于 Turbo C++,但我想知道为什么这些错误会出现在 Visual C++ 中。
Error 1 error C2146: syntax error : missing ';' before identifier 'file'
Error 4 error C2146: syntax error : missing ';' before identifier 'file'
Error 10 error C2995: 'int FileOperations<T>::getNoOfElements(void)' : function template has already been defined
Error 9 error C2995: 'T FileOperations<T>::readFromFile(int)' : function template has already been defined
Error 8 error C2995: 'void FileOperations<T>::swriteToFile(T,int)' : function template has already been defined
Error 7 error C2995: 'void FileOperations<T>::writeToFile(T)' : function template has already been defined
Error 2 error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
Error 3 error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
Error 5 error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
Error 6 error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
#ifndef FileOp_h
#define FileOp_h
#include <iostream>
#include <cstdlib>
#include <fstream>
template <class T>
class FileOperations
{
private:
fstream file;
public:
FileOperations(){};
FileOperations(const char* fileName){fileOpen(fileName);};
void fileOpen(const char* fileName){file.open(fileName,ios::in|ios::out|ios::ate|ios::binary);};
void writeToFile(T);
void swriteToFile(T,int);
T readFromFile(int);
int getNoOfElements();
~FileOperations(){file.close();};
};
#endif
template <class T>
void FileOperations<T>::writeToFile(T fileOb)
{
file.clear();
file.write((char*)&fileOb, sizeof(fileOb))<<flush;
}
template <class T>
void FileOperations<T>::swriteToFile(T fileOb,int seekTo)
{
file.clear();
file.seekp(seekTo,ios::beg);
file.write((char*)&fileOb, sizeof(fileOb))<<flush;
}
template <class T>
T FileOperations<T>::readFromFile(int seekTo)
{
T object;
file.seekg(seekTo,ios::beg);
file.read((char*)&object,sizeof(object));
file.clear();
return object;
}
template <class T>
int FileOperations<T>::getNoOfElements()
{
file.seekg(0,ios::end);
int size=file.tellg();
return size/sizeof(T);
}
【问题讨论】:
-
我得到了第一个的答案。这是因为我没有使用命名空间。现在我想知道为什么它说功能模板已经定义。我该如何解决这个问题
-
这里不需要
;。FileOperations(){};。您在很多地方都在这样做。
标签: c++ templates visual-c++