C++ C++;:头文件中结构的向量

C++ C++;:头文件中结构的向量,c++,vector,struct,C++,Vector,Struct,我有一个让我发疯的小问题,但对你们来说可能是小菜一碟。我定义了一个由4个数字组成的结构,我有一个函数,返回这个结构的向量。我的头文件如下所示: 勒让德水电站 #include <opencv2/opencv.hpp> #include <stdio.h> #include <stdlib.h> #include <iostream> #include <fstream> #include <sstream> #include

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

勒让德水电站

#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_ */
我得到的错误很简单 D

(别介意台词,就像我说的,我评论了很多东西)

有两件事对我来说很奇怪:如果我不声明一个向量,而是一个四倍的向量

vector<FourDoubles> LegendreLookupTable(int size) {

   ...
   FourDoubles test;
   test.Zeroth=5.5;
   ...
}
向量LegendreLookupTable(整数大小){
...
四倍试验;
试验.零=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) {
   ...
}
struct FourDoubles{
双零;
双优先;
双秒;
双三分之一;
};
向量LegendreLookupTable(int-size);
int main(){
...
}
向量LegendreLookupTable(整数大小){
...
}

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

您忘记在hpp文件中包含
头。这是错误的真正来源,这就是为什么如果您声明裸结构而不是结构向量,它会起作用。

您忘记在hpp文件中包含
头。这是错误的真正来源,这就是为什么如果声明裸结构而不是结构向量,它会起作用。

很抱歉响应太晚。那个叫“现实生活”的讨厌的东西突然出现了,我在最后几天很忙。我在另一台计算机上检查了代码,没有错误。我认为我对编程的了解是正确的,在我亲爱的Ubuntu中(或者在gcc中)一定有一些奇怪的bug。就我而言,这个问题是可以解决的


非常感谢KjMag。你帮我弄清楚发生了什么事。祝你有愉快的一天。

很抱歉反应太晚。那个叫“现实生活”的讨厌的东西突然出现了,我在最后几天很忙。我在另一台计算机上检查了代码,没有错误。我认为我对编程的了解是正确的,在我亲爱的Ubuntu中(或者在gcc中)一定有一些奇怪的bug。就我而言,这个问题是可以解决的


非常感谢KjMag。你帮我弄清楚发生了什么事。祝您有愉快的一天。

您是否包括了
向量机
?请尝试创建一个并向我们展示。并复制粘贴(作为文本)完整的错误输出,包括可能的信息注释。很抱歉,我将编辑一些澄清,请稍候。然而,事实上,我已经发布了一个完整的示例,因为编译时已经发生了错误。我只是注释掉了除了结构和函数之外的所有内容,甚至我的主文件现在也是空的。但我将添加错误输出。是否包括
向量
?请尝试创建并向我们展示。并复制粘贴(作为文本)完整的错误输出,包括可能的信息注释。很抱歉,我将编辑一些澄清,请稍候。然而,事实上,我已经发布了一个完整的示例,因为编译时已经发生了错误。我只是注释掉了除了结构和函数之外的所有内容,甚至我的主文件现在也是空的。但是我将添加错误输出。非常感谢您的回答。我刚刚在我的hpp文件中添加了“#include”-我仍然得到相同的错误。此外,我之前没有将该头添加到主文件中,正如我所说的,如果我在主文件中声明了结构和函数,那么整个向量的工作方式与预期的一样。(仔细想想,我想知道为什么我没有包含标题时它会起作用)这很有趣。我复制了您的代码并在我的案例中工作(Visual Studio 2015)。您使用的是哪个openCV版本?如果您从cpp文件中抛出
使用名称空间std/cv
,并在函数定义中显式使用
std::vector
,它会改变什么吗?有趣的是,它很有趣,lol。我使用openCV 3.2.0,但它甚至会连接到openCV吗?我刚刚删除了using名称空间,仍然是一样的。我甚至杀了所有的人,除了。我可以稍后在另一台计算机上测试,也许我的系统有问题,特别是因为它适合你。(顺便说一句,我使用eclipse)如果您使用openCV<3.0,那么会有一个名为cv::vector的数据结构,我很好奇这是否是问题所在,因为您已经在同一个文件中使用了名称空间std和cv。但是,您的版本中没有cv::vector。您的IDE应该不重要——重要的是您的编译器,它是由错误消息判断的。我编写了我使用的IDE,因为VS表示Microsoft VC++编译器,除非另有说明;)非常感谢你的回答。我刚刚在我的hpp文件中添加了“#include”-我仍然得到相同的错误。此外,我之前没有将该头添加到主文件中,正如我所说的,如果我在主文件中声明了结构和函数,那么整个向量的工作方式与预期的一样。(仔细想想,我想知道为什么我没有包含标题时它会起作用)这很有趣。我复制了您的代码并在我的案例中工作(Visual Studio 2015)。您使用的是哪个openCV版本?如果您从cpp文件中抛出
使用名称空间std/cv
,并在函数定义中显式使用
std::vector
,它会改变什么吗?有趣的是,它很有趣,lol。我使用openCV 3.2.0,但它甚至会连接到openCV吗?我刚刚删除了using名称空间,仍然是一样的。我甚至杀了所有的人,除了。我可以稍后在另一台计算机上测试,也许我的系统有问题,特别是因为它适合你。(顺便说一下,我使用eclipse)如果您使用openCV<3.0,那么有一个名为cv::vector的数据结构,我很好奇这是否可以
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
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) {
   ...
}