2013-03-23 84 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