2013-03-23 57 views
1

我想讓我的getFeatures函數返回結構向量。我已經在頭文件中聲明瞭結構,但是當我在.cpp文件中嘗試寫我的函數名時,我得到了使用未聲明的標識符錯誤。標識符被聲明,我可以在其他函數中使用它。另外,當我寫我的返回語句時,我得到一個沒有可行的向量類型轉換爲int錯誤。在我的頭文件中,我有函數原型,它聲明我的函數應該返回我的結構類型的向量,而不是類型爲int的向量。究竟是怎麼回事?無法返回在頭文件中聲明的結構向量

#include "Feature_Builder.h" 

Feature_Builder::Feature_Builder() 
{ 
    int input; 
    vector<int> intImageVals, temp; 

    fstream file; 

    file.open("Integral_Images.txt", ios::in); 

    if (file.fail()) 
    { 
     cerr << "File not open!\n"; 
     exit(EXIT_FAILURE); 
    } 

    for (int i=0; i<12876; i++) 
    { 
     file >> input; 
     while (input != -1) 
     { 
      intImageVals.push_back(input); 

      file >> input; 
     } 

     buildFeatureOne(intImageVals); 
     buildFeatureTwo(intImageVals); 
     buildFeatureThree(intImageVals); 
     buildFeatureFour(intImageVals); 

     featureIndex = 0; 
     intImageVals.clear(); 
    } 
} 

/***************************************************************************** 
This is the function with errors! XCode says featureValues is an undeclared 
identifier and that features should be of type int! 
*****************************************************************************/ 
vector<featureValues> Feature_Builder::getFeatures() 
{ 
    return features; 
} 

我的頭文件

#ifndef Facial_Learner_Feature_Builder_h 
#define Facial_Learner_Feature_Builder_h 

#include <iostream> 
#include <fstream> 
#include <vector> 

using namespace std; 

class Feature_Builder 
{ 
private: 
    void buildFeatureOne(vector<int>); 
    void buildFeatureTwo(vector<int>); 
    void buildFeatureThree(vector<int>); 
    void buildFeatureFour(vector<int>); 

    struct featureValues 
    { 
    private: 
     vector<int> vals; 

    public: 
     inline void pushValue(int value) 
     {vals.push_back(value);} 

     inline int getValue(int i) 
     {return vals[i];} 
    }; 

    int featureIndex; 
    vector<featureValues> features; 

public: 
    Feature_Builder(); 
    vector<featureValues> getFeatures(); 
}; 

#endif 
+0

我真的沒有返回向量的方式......你應該返回指針。 – 2013-03-23 01:28:16

回答

2

時,需要在內部結構的正確作用域:

vector<Feature_Builder::featureValues> Feature_Builder::getFeatures() { ... } 
+0

是的,這是伎倆。我不知道你需要指定範圍。謝謝! – lxdr 2013-03-23 01:45:12