0

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

    //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);*/
    }
4

1 回答 1

2

bitarray.h除非在标头中声明,否则这些函数对于bitarray.cpp. 如果您想在 中访问它们,请在标题中sieve.h声明它们,或者在/可访问的另一个文件中声明它们。bitarray.hsieve.cppsieve.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)
{
  ...
于 2014-04-17T00:01:14.540 回答