单独文件中的C ++函数无效

时间:2015-09-04 12:04:49

标签: c++ function include

我有一个问题,我提前为可能是一个业余问题道歉,但我试图从一个单独的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中的文件......',这可能与它有关?在任何情况下,我都很难过,先谢谢你的帮助!

约书亚

2 个答案:

答案 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,将编译没有任何问题,但不适用于每个编译器