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

标签 c++ sieve

我在名为 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);*/
    }

最佳答案

除非在 bitarray.h header 中声明,否则这些函数是 bitarray.cpp 的本地函数。如果您想在 sieve.h 中访问它们,请在 bitarray.h header 中或在可通过 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() 函数中对其所做的任何更改都不会反射(reflect)在原始对象中。

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

void Sieve(BitArray& a)
{
  ...

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

相关文章:

c++ - 这两个分区函数之间的区别

haskell - 具有递归和列表理解的质数生成器

c - Prime Sieve 无输出

类及其派生类的 C++ 内存池

c++ - 虚函数题

c++ - 指向二维数组的指针的 C/C++ 数组

c - 针对内存优化的初筛

algorithm - 在自然数的第 k 遍中删除每 (k+1) 个剩余元素

algorithm - 是否有可能提出一个主筛的分布式/多核实现。

java - Eclipse (C++) 崩溃无法写入核心转储。核心转储已被禁用