2015-08-17 27 views
0

我想這樣的一個結構傳遞:C++如何傳遞一個像這樣的結構?

template<typename T> 
struct mystruct{ 
    T a; 
    T b; 
    typename std::vector<T> v1; 
}; 

到這樣的功能:

template<typename T> 
inline void myfunc(const typename mystruct<T> &struct1){ 
    std::cout<<struct1.a<<'\t' 
      <<struct2.b<<'\n'; 
    for(int i =0; i<struct1.v1.size(); i++) 
     std::cout<<struct1.v1[i]<<'\n'; 
} 

我知道myfunc()必須做某事。錯,我該如何正確地做到這一點?非常感謝!

#include <iostream> 
#include <vector> 

int main(){ 
    mystruct<float> strc1; 
    strc1.a = 1.0; 
    strc1.b = 2.0; 
    strc1.v1.push_back(1.0); 
    strc1.v1.push_back(2.0); 
    myfunc(strc1); 
    return 0; 
} 
+2

您正在使用「類型名稱」太多次更新代碼,您應該只一語中的*模板使用「類型名稱」 *這裏,不能用於聲明一個成員變量或一個函數的參數 –

+0

我很抱歉哥們@克里斯貝克,我不能抓住你,你能否更清楚地解釋一下? – Kylxyz

+0

是什麼問題?只是通過它像其他正常功能 –

回答

3

您有不必要的typename

這是工作

#include <iostream> 
#include <vector> 

template<typename T> 
struct mystruct{ 
    T a; 
    T b; 
    typename std::vector<T> v1; // typename here is also not needed 
}; 

template<typename T> 
inline void myfunc(const /*-typename-*/ mystruct<T> &struct1){ 
    std::cout<<struct1.a<<'\t' 
      <<struct1.b<<'\n'; 
    for(size_t i =0; i<struct1.v1.size(); i++) 
     std::cout<<struct1.v1[i]<<'\n'; 
} 

int main(){ 
    mystruct<float> strc1; 
    strc1.a = 1.0; 
    strc1.b = 2.0; 
    strc1.v1.push_back(1.0); 
    strc1.v1.push_back(2.0); 
    myfunc(strc1); 
    return 0; 
} 

Demo on Coliru

+0

謝謝你,它的工作原理! – Kylxyz

相關問題