我有一个很大的问题,我不知道我是否错过了一些明显的东西或什么,但我不能发现我的错误。我有类SPN、A和B。我重载了2次operator=。我想将A类型或B类型作为参数传递。
void SPN::operator=(A*& R)
{
(*R)(*this);
}
void SPN::operator=(B*& R)
{
(*R)(*this);
}
它不会抛出任何错误。但是如果我在类B或A中尝试make operator(),则使用参数SPN,如下所示:
void A::operator()(SPN*& spn)
{
//todo
}
它会抛出SPN未命名类型的错误。我甚至不能在A类或B类中创建类SPN对象。也许它不是如何客观编程工作,所以我想得到它,为什么我不能那样做。
有我的代号:A.H(B相同)
#pragma once
#include "SPN.h"
class A
{
public:
SPN temp; <<it throws error: 'SPN' has not been delcared
void operator()(SPN*& spn); <<it throws error: 'SPN' has not been delcared
};
SPN.H
#pragma once
#include "A.h"
#include "B.h"
#include <random>
#include <iostream>
class SPN
{
public:
friend class A;
friend class B;
A* a;
B* b;
void operator=(A*& R);
void operator=(B*& R);
};
总结一下,我的问题是:为什么它会抛出错误,那个类型SPN没有命名一个类型(在a和B类中),但对于SPN来说,它工作得很好(在运算符中)
由于a.h
和b.h
包含在spn.h
中,而spn.h
包含在a.h
和b.h
中,因此存在循环依赖关系。我要做的是从spn.h
中删除a
和b.h
包含的a
和b
。但是,您可能需要在spn.h
中转发声明a
和b
(因为它实际上不包含该文件,所以它会出现与您现在看到的错误相同的错误):
#pragma once
#include <random>
#include <iostream>
// forward declarations
class A;
class B;
class SPN
{
public:
friend class A;
friend class B;
A* a;
B* b;
void operator=(A*& R);
void operator=(B*& R);
};
由于您只使用指针,这应该可以工作。您可能需要在源代码(spn.cp
、spn.cc
等)文件中包含a.h
和b.h
来进行编译。希望这能解决问题!
而且,就像一些评论者所说的,a*&
有点古怪--但这可能要留给另一个问题来解决。
问题内容: 我认为在理解OOP的工作方式方面存在问题。我已经更改了它可以工作的代码,但这不是我认为的正确方法。以下情况(不,我不是自己创建用户登录,实际上只是为了让本地开发人员更好地理解OOP): 我有一个database.php文件: 因此,在此类中,我正在创建数据库连接,然后返回连接(对象?) 然后,我有第二个类,著名的User类(实际上,我没有使用自动加载功能,但是我知道): 那是我的两堂课
我想我在理解OOP是如何工作的方面遇到了一个问题。我已经改变了它的工作代码,但它不是我认为的支持方式。下面的场景(不,我不是自己创建一个用户登录,它实际上只是为了让本地开发人员更好地理解OOP): 我有一个database.php文件: 因此,在这个类中,我创建了一个数据库连接,并返回该连接(对象?) 然后我有第二个类,著名的User类(其实我没有在使用autoload,但我知道它): 这是我的两
我想我在理解OOP是如何工作的方面遇到了一个问题。我已经改变了它的工作代码,但它不是我认为的支持方式。下面的场景(不,我不是自己创建一个用户登录,它实际上只是为了让本地开发人员更好地理解OOP): 我有一个database.php文件: 因此,在这个类中,我创建了一个数据库连接,并返回该连接(对象?) 然后我有第二个类,著名的User类(其实我没有在使用autoload,但我知道它): 这是我的两
注:内容翻译自官网文档 Language Guide (proto3) 中的 Using Other Message Types 一节 可以使用其他消息类型作为字段类型. 例如, 假设你想在每个SearchResponse消息中包含Result消息 - 为了做到这点, 你可以在相同的.proto文件中定义Result消息类型然后具体指定SearchResponse中的一个字段为Result类型:
问题内容: 我已经用C ++实现了一个类。我想将其与Python一起使用。 请提出逐步方法,并详细说明每个步骤。 这样的东西 现在,在Python中 请提出建议。我该怎么办?注意:我想知道手动的方法。我不希望任何第三方库依赖。 问题答案: 查看Boost.Python。这是一个用C ++编写python模块的库。 还要研究SWIG,它也可以处理其他脚本语言的模块。我过去曾使用它来为我的课程编写模块