[英]C++ How to use functions from a cpp file in a header file
我在名为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.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)
{
...
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.