C ++:头文件中struct的向量

时间:2017-08-21 09:03:01

标签: c++ vector struct

我有一个小问题让我发疯,但对你们来说可能是小菜一碟。我定义了一个由4个数字组成的结构,我有一个函数返回这个结构的向量。我的头文件如下所示:

Legendre.hpp

#include <opencv2/opencv.hpp>
#include <stdio.h>
#include <stdlib.h>
#include <iostream>
#include <fstream>
#include <sstream>
#include <vector>  //as suggested, but it doesn't help

#ifndef LEGENDRE_HPP_
#define LEGENDRE_HPP_    

struct FourDoubles {

    double Zeroth;
    double First;
    double Second;
    double Third;
};

std::vector<FourDoubles> LegendreLookupTable(int size);

#endif /* LEGENDRE_HPP_ */

(实际上还有一些功能,所以只要忽略看似毫无意义的包含) 然后我有以下使用标题的cpp文件:

Legendre.cpp

#include "Legendre.hpp"

using namespace std;
using namespace cv;

vector<FourDoubles> LegendreLookupTable(int size) {

    vector<FourDoubles> res(size);
    int i;
    double x,x2,x3,x4;

    for(i=0;i<size;i++) {

    x=2.0*i/(size-1.0)-1.0;
    x2=x*x;
    x3=x2*x;
    x4=x3*x;
    res[i].Zeroth=x;
    res[i].First=1.5*x2-0.5;
    res[i].Second=2.5*x3-1.5*x;
    res[i].Third=4.375*x4-3.75*x2+0.375;
    }

return res;
}

以防任何人好奇:我正在计算图像的Legendre时刻。但是,当我想编译它时,编译器会告诉我&#34; Field&#39; Zeroth&#39;无法解决&#34;,其他领域相同。

当我在我的文件中注释掉其他所有文件以及我的主文件看起来像

时,就会发生错误
#include "Legendre.hpp"

using namespace std;

int main(int argc, char* argv[])
{
}

我得到的错误很简单 d

escription  Resource    Path    Location    Type
Field 'Third' could not be resolved Legendre.cpp    /Finder line 108    Semantic Error
Field 'Second' could not be resolved    Legendre.cpp    /Finder line 107    Semantic Error
Field 'Zeroth' could not be resolved    Legendre.cpp    /Finder line 105    Semantic Error
Field 'First' could not be resolved Legendre.cpp    /Finder line 106    Semantic Error

(不要注意这些线条,就像我说的那样,我注释了很多东西)

对我来说有两件事情很奇怪:如果我没有声明一个向量,那么就像一个FourDoubles一样

vector<FourDoubles> LegendreLookupTable(int size) {

   ...
   FourDoubles test;
   test.Zeroth=5.5;
   ...
}

然后它完美无缺。此外,当我直接在主文件中写入整个内容时,例如

struct FourDoubles {

    double Zeroth;
    double First;
    double Second;
    double Third;
};

std::vector<FourDoubles> LegendreLookupTable(int size);

int main() {

   ...
}

vector<FourDoubles> LegendreLookupTable(int size) {
   ...
}

我可能在这里遗漏了一些非常基本的东西,但我不理解为什么它不能处理我的结构的向量,除非它在主文件中声明。任何帮助启发都将深表感谢。

2 个答案:

答案 0 :(得分:4)

您忘记在hpp文件中包含<vector>标头。这是错误的真正来源,如果你声明裸结构而不是结构向量,那就是它的原因。

答案 1 :(得分:0)

对于迟到的回复感到抱歉。这个叫做现实生活的令人讨厌的事情开始了,我在最后几天很忙。我在另一台计算机上检查了我的代码并且没有错误。我认为我对编程知道的是正确的,在我亲爱的Ubuntu(或者可能在gcc中)某处肯定会有一些奇怪的错误。因此,就我而言,这个问题可以结束。

非常感谢KjMag。你帮助我找出了发生了什么。祝你有愉快的一天。