У меня есть класс в заголовочном файле с именем bitarray.h и соответствующий bitarray.cpp, и у меня также есть sieve.h. В sieve.h и bitarray.cpp #include bitarray.h и sieve.h есть только функция void Sieve (BitArray a). Я хотел бы вызвать Set () и Unset (), которые объявлены в bitarray.h и определены в bitarray.cpp из функции Sieve, но это не позволит мне. Как это исправить.
//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)
{
...
Других решений пока нет …