我在循环依赖的社交网络模拟分配中遇到问题。我是预编译头文件的新手,但我想尝试一下。 到目前为止,我的代码正在运行,但是我迷迷糊糊了。 IDE VS。
我已经声明了要在另一个类中调用的类的功能' 功能,但不幸的是我遇到了
identifier "function_name" is undefined
我猜这是由于预编译头中头的顺序所致。哪个btw仅适用于非常令人不安的特定序列。
我已经尝试过重新排列头文件,这是一种没有预编译头文件的新解决方案,但到目前为止没有任何解决办法。
我的pch.h
#ifndef PCH_H
#define PCH_H
class User;
class Network;
class Message;
class Wall;
class FriendRequest;
class ReplyMessage;
class Menu;
class Exceptions;
#include "FriendRequest.h"
#include "Message.h"
#include "Wall.h"
#include "User.h"
#include "Network.h"
#include "ReplyMessage.h"
enum fr_status {
accepted = 0, rejected = 1, pending = 2
};
#endif //PCH_H
还有我要引用的类。
Wall.h
#pragma once
class Wall
{
private:
std::list<Message> msgs_posted;
User* w_owner;
public:
Wall() = delete;
Wall(User* wownr);
virtual ~Wall();
void postMsg(User& usr ,Message msg);
void toString();
std::list<Message> getMsgsPosted();
};
Wall.cpp
#include "pch.h"
#include <iostream>
Wall::Wall(User * wownr)
:w_owner(wownr)
{
}
Wall::~Wall()
{
}
void Wall::postMsg(User& usr, Message msg)
{
//if are friends
if ((usr == *this->w_owner) || areFriends(usr,*this->w_owner)){
msgs_posted.push_back(msg);
/* does it get copied altogether? */
}
else
std::cout << "You can not post at this person's wall." << std::endl;
}
void Wall::toString()
{
std::list<Message> ::iterator tmp_it;
for (tmp_it = msgs_posted.begin(); tmp_it!= msgs_posted.end(); tmp_it++) {
tmp_it->toString();
}
std::cout << std::endl;
}
std::list<Message> Wall::getMsgsPosted()
{
return msgs_posted;
}
Network.h
#pragma once
class Network
{
private:
/* Singleton Implementation */
static Network* instance;
Network();
/* Misc */
std::list<User> users;
std::list<User>::iterator usr_it;
std::map<User, std::list<User*> > connections; // maybe pointer to users list?
std::map<User, std::list<User*> >::iterator map_it;
public:
/* Singleton Implementation */
Network(const Network&) = delete;
Network& operator=(const Network&) = delete;
~Network();
static Network& getInstance();
/* Other methods */
bool u_Exists(User& usr);
void addUser();
void addUser(User& usr);
void deleteUser(User& usr);
void connectUsers(User& usr1, User& usr2);
std::list<User> hasFriends(User& usr);
bool areFriends(User& usr1, User& usr2);
std::list<User> commonFriends(User* usr1, User* usr2);
};
Network.cpp
#include "pch.h"
#include <iostream>
Network::Network()
{}
...
Network& Network::getInstance()
{
static Network instance;
return instance;
}
bool Network::areFriends(User & usr1, User & usr2)
{
if (usr1 == usr2) {
return false;
}
else /*to be added*/{
return false;
}
}
我指的功能是bool Network::areFriends(User & usr1, User & usr2)
,用于
void Wall::postMsg(User& usr, Message msg)
{
//if are friends
if ((usr == *this->w_owner) || areFriends(usr,*this->w_owner)){
如果需要的话,我将发布其余的课程,但不是因为人数过多。 我想找到一种以所需顺序进行声明的方法。
答案 0 :(得分:0)
所以不应该是这样的
if ((usr == *this->w_owner) || Network::getInstance().areFriends(usr,*this->w_owner)){
在您发布的代码中,没有Network
实例可以调用areFriends
函数。