我有一个小问题让我发疯,但对你们来说可能是小菜一碟。我定义了一个由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) {
...
}
我可能在这里遗漏了一些非常基本的东西,但我不理解为什么它不能处理我的结构的向量,除非它在主文件中声明。任何帮助启发都将深表感谢。
答案 0 :(得分:4)
您忘记在hpp文件中包含<vector>
标头。这是错误的真正来源,如果你声明裸结构而不是结构向量,那就是它的原因。
答案 1 :(得分:0)
对于迟到的回复感到抱歉。这个叫做现实生活的令人讨厌的事情开始了,我在最后几天很忙。我在另一台计算机上检查了我的代码并且没有错误。我认为我对编程知道的是正确的,在我亲爱的Ubuntu(或者可能在gcc中)某处肯定会有一些奇怪的错误。因此,就我而言,这个问题可以结束。
非常感谢KjMag。你帮助我找出了发生了什么。祝你有愉快的一天。