У меня есть следующий класс с парой функций-друзей:
class Teleport
{
public:
Teleport();
~Teleport();
void display();
Location teleportFrom(int direction);
friend bool overlap(Wall * wall, Teleport * teleport);
friend bool overlap(Location location);
friend bool overlap(Wall * wall);
friend bool overlap();
Location location;
static vector<Teleport *> teleports;
private:
int currentTeleport;
};
bool overlapT(vector<Wall *> walls);
Когда я помещаю последнюю функцию в качестве функции-друга внутри класса следующим образом:
class Teleport
{
public:
//...same functions as before...
friend bool overlapT(vector<Wall *> walls);
//... same functions as before...
private:
//... same functions as before...
}
Кодвыдает дополнительную ошибку overlapT was not declared in this scope
в main.cpp.Что касается других функций перекрытия (которые перегружены в других файлах), я получаю похожие ошибки, когда они являются дружественными функциями в классе: error: no matching function for call to 'overlap()'
.Я использовал функции друзей в том же порядке, что и в другом файле, и не обнаружил ошибок компиляции.Что может быть причиной этой странной ошибки?
Хорошо, есть небольшая программа, которая иллюстрирует эту ошибку!
main.cpp
#include <iostream>
#include "Teleport.h"
using namespace std;
int main()
{
Teleport teleport;
isTrue();
isNotTrue();
isTrue(1);
return 0;
}
Teleport.h
#ifndef TELEPORT_H
#define TELEPORT_H
class Teleport
{
public:
Teleport();
virtual ~Teleport();
friend bool isTrue();
friend bool isNotTrue();
private:
bool veracity;
};
bool isTrue(int a); //useless param, just there to see if anything happens
#endif // TELEPORT_H
teleport.cpp
#include "Teleport.h"
//bool Teleport::veracity;
Teleport::Teleport()
{
veracity = true;
}
Teleport::~Teleport()
{
//dtor
}
bool isTrue()
{
return Teleport::veracity;
}
bool isNotTrue()
{
return !Teleport::veracity;
}
bool isTrue(int a)
{
if(isTrue())
return true;
else
return isNotTrue();
}
Ошибки компиляции:
error: too few arguments to function 'bool isTrue(int)'
error: at this point in file
error: 'isNotTrue' was not declared in this scope
Я подозреваю, что статические переменные могут иметь какое-то отношение к этому, так как мои другие классы без статических переменных работают простохорошо.
РЕДАКТИРОВАТЬ: На самом деле, кажется, что статические переменные не являются проблемой.Я просто удалил ключевое слово static
из определения класса Teleport / как оно называется? И прокомментировал bool Teleport::veracity;
;тем не менее, я все еще получаю две ошибки