我在名为bitarray.h的头文件和相应的bitarray.cpp中有一个类,并且我也有sieve.h。 sieve.h和bitarray.cpp#包含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);*/
    }

最佳答案

除非在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)
{
  ...

关于c++ - C++如何使用头文件中的cpp文件中的函数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23122305/

10-12 04:24