我在名为 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/