2014-04-03 75 views
1

以下代码有什么问题。因为如果我在主函数内定义类,编译失败,我不理解编译器错误。在函数中定义的结构/类编译错误

测试从here

评论的drift_f的第一定义(外的main())的代码并取消的drif_t内定义(main()函数内)和编译器将得到以下错误消息:

prog.cpp: In function ‘int main()’: 
prog.cpp:27:24: error: template argument for ‘template<class> class std::allocator’ uses local type ‘main()::drift_t’ 
     std::deque<drift_t> drift; drift.push_back(drift_t(0,0));drift.push_back(drift_t(-50,-50)); 
         ^
prog.cpp:27:24: error: trying to instantiate ‘template<class> class std::allocator’ 
prog.cpp:27:24: error: template argument 2 is invalid 
prog.cpp:27:31: error: invalid type in declaration before ‘;’ token 
     std::deque<drift_t> drift; drift.push_back(drift_t(0,0));drift.push_back(drift_t(-50,-50)); 
          ^
prog.cpp:27:39: error: request for member ‘push_back’ in ‘drift’, which is of non-class type ‘int’ 
     std::deque<drift_t> drift; drift.push_back(drift_t(0,0));drift.push_back(drift_t(-50,-50)); 
            ^
prog.cpp:27:69: error: request for member ‘push_back’ in ‘drift’, which is of non-class type ‘int’ 
     std::deque<drift_t> drift; drift.push_back(drift_t(0,0));drift.push_back(drift_t(-50,-50)); 

#include <iostream> 
#include <deque> 
using namespace std; 

    class drift_t{ //It works 
     public: 
     int _drift; 
     int _immediateDrift; 
     drift_t() : _drift(0), _immediateDrift(0) {} 
     drift_t(int d, int expected) : _drift(d), _immediateDrift(expected) {} 
     drift_t(const drift_t& ro) : _drift(ro._drift), _immediateDrift(ro._immediateDrift) {} 
     drift_t& operator = (const drift_t& ro) { this->_drift = ro._drift; this->_immediateDrift = ro._immediateDrift; return *this; } 
     } ;//*/ 

int main() { 

    /*class drift_t{ //It doesn't works 
     public: 
     int _drift; 
     int _immediateDrift; 
     drift_t() : _drift(0), _immediateDrift(0) {} 
     drift_t(int d, int expected) : _drift(d), _immediateDrift(expected) {} 
     drift_t(const drift_t& ro) : _drift(ro._drift), _immediateDrift(ro._immediateDrift) {} 
     drift_t& operator = (const drift_t& ro) { this->_drift = ro._drift; this->_immediateDrift = ro._immediateDrift; return *this; } 
     } ;//*/ 

    std::deque<drift_t> drift; drift.push_back(drift_t(0,0));drift.push_back(drift_t(-50,-50)); 
    return 0; 
} 
+0

它在这里编译得很好。编译器的错误信息是什么? –

+0

你使用C++ 11吗?此代码为我编译:http://coliru.stacked-crooked.com/a/c27b407705349ae9 –

+0

我在工作站上使用Ideone和4.6.3下的GCC C++ 4.8.1。两者都有相同的结果。查看我最后的编辑了解更多详情。 – alexbuisson

回答

1

是不是编译器说的错误?您不能使用本地类进行该模板初始化。

尝试使用-std = C++ 11进行编译,因为我相信它会放松一下。

相关问题