我有一个问题,我提前为可能是一个业余问题道歉,但我试图从一个单独的C ++文件中包含一个函数,我收到错误。
这是主要代码(以及重要部分):
#include <vector>
using namespace std;
#include "/remote/cronin/jdagosti/Contour/shuffle.cc"
int main() {
vector<double> JD;
vector<double> zenith_deg;
vector<double> azimuth_deg;
vector<double> JD_sh;
vector<double> zen_sh;
vector<double> az_sh;
for(int i = 0; i < 5; ++i){
cout << JD[i] << endl;
}
shuffle(JD,zenith_deg,azimuth_deg,JD_sh,zen_sh,az_sh);
cout << " " << endl;
for(int i = 0; i < 5; ++i){
cout << JD_sh[i] << endl;
}
}
这是我的shuffle函数(在一个单独的.cc文件中):
void shuffle(vector<double> JD, vector<double> zenith, vector<double> azimuth, vector<double> JD_sh, vector<double> zen_sh, vector<double> az_sh){
vector<int> array;
for(int j = 0; j < JD.size(); ++j){
array.push_back(0);
}
int index;
srand(time(NULL));
for(int i = 0; i < JD.size(); ++i){
index = floor(JD.size() * rand() / RAND_MAX);
if(array.at(index) == 1){
i -= 1;
continue;
} else {
array.at(index) = 1;
JD_sh.push_back(JD[index]);
}
}
}
这些是我得到的错误:
shuffle.cc:6:14: error: variable or field ‘shuffle’ declared void
void shuffle(vector<double> JD, vector<double> zenith, vector<double> azimuth, vector<double> JD_sh, vector<double> zen_sh, vector<double> az_sh){
^
shuffle.cc:6:14: error: ‘vector’ was not declared in this scope
shuffle.cc:6:21: error: expected primary-expression before ‘double’
void shuffle(vector<double> JD, vector<double> zenith, vector<double> azimuth, vector<double> JD_sh, vector<double> zen_sh, vector<double> az_sh){
^
shuffle.cc:6:33: error: ‘vector’ was not declared in this scope
void shuffle(vector<double> JD, vector<double> zenith, vector<double> azimuth, vector<double> JD_sh, vector<double> zen_sh, vector<double> az_sh){
^
shuffle.cc:6:40: error: expected primary-expression before ‘double’
void shuffle(vector<double> JD, vector<double> zenith, vector<double> azimuth, vector<double> JD_sh, vector<double> zen_sh, vector<double> az_sh){
^
shuffle.cc:6:56: error: ‘vector’ was not declared in this scope
void shuffle(vector<double> JD, vector<double> zenith, vector<double> azimuth, vector<double> JD_sh, vector<double> zen_sh, vector<double> az_sh){
^
shuffle.cc:6:63: error: expected primary-expression before ‘double’
void shuffle(vector<double> JD, vector<double> zenith, vector<double> azimuth, vector<double> JD_sh, vector<double> zen_sh, vector<double> az_sh){
^
shuffle.cc:6:80: error: ‘vector’ was not declared in this scope
void shuffle(vector<double> JD, vector<double> zenith, vector<double> azimuth, vector<double> JD_sh, vector<double> zen_sh, vector<double> az_sh){
^
shuffle.cc:6:87: error: expected primary-expression before ‘double’
void shuffle(vector<double> JD, vector<double> zenith, vector<double> azimuth, vector<double> JD_sh, vector<double> zen_sh, vector<double> az_sh){
^
shuffle.cc:6:102: error: ‘vector’ was not declared in this scope
void shuffle(vector<double> JD, vector<double> zenith, vector<double> azimuth, vector<double> JD_sh, vector<double> zen_sh, vector<double> az_sh){
^
shuffle.cc:6:109: error: expected primary-expression before ‘double’
void shuffle(vector<double> JD, vector<double> zenith, vector<double> azimuth, vector<double> JD_sh, vector<double> zen_sh, vector<double> az_sh){
^
shuffle.cc:6:125: error: ‘vector’ was not declared in this scope
void shuffle(vector<double> JD, vector<double> zenith, vector<double> azimuth, vector<double> JD_sh, vector<double> zen_sh, vector<double> az_sh){
^
shuffle.cc:6:132: error: expected primary-expression before ‘double’
void shuffle(vector<double> JD, vector<double> zenith, vector<double> azimuth, vector<double> JD_sh, vector<double> zen_sh, vector<double> az_sh){
所以它没有识别主代码中的标题,我保证它们都位于同一个文件夹中。此外,我知道“包含”.cc文件而不是标题是不好的做法,但我不太熟悉这样做,无论如何,我以前肯定看过这个工作。我的印象是,包含该函数的.cc文件相当于将其放在那里,所以它肯定应该识别早期的代码。我注意到的一件事是错误是指'shuffle.cc',而不是它通常所说的内容,有点像'来自位于Maps.cc中的文件......',这可能与它有关?在任何情况下,我都很难过,先谢谢你的帮助!
约书亚
答案 0 :(得分:3)
除了包含它之外,您似乎正在编译shuffle.cc
文件。 如果你坚持包含源文件,那么也不要编译它。
或者... 的
不要包含源文件,并以标准方式编译和链接源文件,但是您需要在源文件中包含正确的头文件。
另外,在修复编译错误时,程序将具有未定义的行为。您可以访问超出范围的JD
向量。或者至少它看起来很喜欢,可能是你填写了你认为不重要的部分。问题是它看起来比你实际上有更多的问题。请尝试为将来的问题创建一个Minimal, Complete, and Verifiable Example。
答案 1 :(得分:0)
当你在项目中包含一些文件时,你没有将文件的文本复制到你的主文件中(就像在JavaScript中一样),首先编译器将每个文件单独编译,然后将链接它们在一起,所以当你调用“shuffle.cc”文件时,你将链接编译版本的“shuffle.cc”,而不是纯文本,当它编译时,没有与main.cpp的连接,所以你需要再次包括所有包含和命名空间
所以只需添加:
#include <vector>
using namespace std;
并且应该工作
P.S:不要忘记包括,我知道在某些IDE中,如Visual Studio,将编译没有任何问题,但不适用于每个编译器