我在头文件中有一个名为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);*/
}
答案 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)
{
...