sieve — C ++ Как использовать функции из файла cpp в заголовочном файле

У меня есть класс в заголовочном файле с именем 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);*/
}

0

Решение

Эти функции, если не объявлено в 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)
{
...
2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]