C ++如何在头文件中使用cpp文件中的函数

时间:2014-04-16 23:58:47

标签: c++ sieve

我在头文件中有一个名为bitarray.h的类和一个相应的bitarray.cpp,我也有一个sieve.h。 sieve.h和bitarray.cpp #include bitarray.h和sieve.h只有一个函数void Sieve(BitArray a)。我想调用Set()和Unset(),它们在bitarray.h中声明,并在Sieve函数的bitarray.cpp中定义,但它不会让我。我该如何解决这个问题。

    //sieve.h
    #include "bitarray.h"
    #include <cmath>

    using namespace std;

    void Sieve(BitArray a)
    {
   //initialize all to 1
   for (int i = 0; i < (a.arraySize*a.unsChar*8); i++)
   {
    a.Set(i);
   }

   //unset 0 and 1 becasue they are never prime
   a.Unset(0);
   a.Unset(1);
   //leave 2 as a 1
       /*for (int i = 2; i < (a.arraySize*a.unsChar*8); i++)
    a.Unset(2*i);*/
    }

1 个答案:

答案 0 :(得分:2)

除非在bitarray.h标题中声明,否则这些函数是bitarray.cpp的本地函数。如果您想在sieve.h中访问它们,请在bitarray.h标题或sieve.cpp / sieve.h可访问的其他文件中声明它们。

// bitarray.h
class BitArray
{
public:
  void Set(); // Example.
  void Unset(); // Example.
};

// sieve.h
#include bitarray.h
void Sieve(BitArray a)
{
  a.Set();
  a.Unset();
}

修改

我非常肯定您遇到的问题是您没有看到BitArray对象的更改,因为您已经传递副本原来的。您在Sieve()函数中对其所做的任何更改都不会反映在原始对象中。

尝试通过引用传递BitArray对象:

void Sieve(BitArray& a)
{
  ...