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