尝试使用当前签名在g ++中编译我的代码时出错:
cannot declare member function static void Foo::Bar(std::ostream&, const Foo::Node*) to have static linkage
Run Code Online (Sandbox Code Playgroud)
我的问题是双重的:
在使用C++时,签名一直是我的死
编辑:这是类头文件,以及:
class Foo {
public:
Foo();
~Foo();
bool insert(const Foo2 &v);
Foo * find(const Foo2 &v);
const Foo * find(const Foo2 &v) const;
void output(ostream &s) const;
private:
//Foo(const Foo &v);
//Foo& operator =(const Foo &v);
//Not implemented; unneeded
struct Node {
Foo2 info;
Node *left;
Node *right;
};
Node * root;
static bool insert(const Foo2 &v, Node *&p);
static void …Run Code Online (Sandbox Code Playgroud) 未命名的命名空间如何优于static关键字?
当我们希望它访问该类的私有成员时,我们将非成员函数作为类的朋友.这赋予它与静态成员函数相同的访问权限.两种选择都会为您提供一个与该类的任何实例无关的函数.
什么时候必须使用朋友功能?什么时候必须使用静态函数?如果两者都是解决问题的可行方案,那么我们如何权衡它们的适用性呢?是否有一个默认情况下应该首选?
例如,当实现一个工厂创建foo只有私有构造函数的类的实例时,工厂函数应该是foo(你会调用foo::create())的静态成员还是应该是友元函数(你会调用create_foo())?
我的C编程书说当我想创建一个静态函数时,我需要将static关键字放在函数定义的前面.它没有明确提及原型.此外,这些示例不使用原型,只是将静态函数放在文件的顶部(这样它们就不需要我假设的原型).
那么,静态函数是否需要原型的static关键字?或者我只把它放在定义的前面?
我无法解决这个问题.这是一个简单的例子:
class x
{
public:
void function(void);
private:
static void function2(void);
};
void x::function(void)
{
x::function2(void);
}
static void function2(void)
{
//something
}
Run Code Online (Sandbox Code Playgroud)
我得到错误,其中抱怨function2是私有的.如果我把它公开(我真的不想这样做),我会得到关于对function2的未定义引用的错误.我究竟做错了什么?谢谢!
有没有办法在MATLAB类中定义静态成员变量?
这不起作用:
classdef A
properties ( Static )
m = 0;
end
end
Run Code Online (Sandbox Code Playgroud)
它建议使用关键字"常量"而不是"静态",不能修改常量属性.我想要一个对所有类对象通用的变量A,我希望能够在类的方法中修改该变量A.
所以我需要的是一个私有静态成员变量.有没有办法在MATLAB中获得它?
发现可以使用静态成员函数中的持久变量来完成变通方法.
在这种情况下,您应该从基类继承所有类,如下所示.
classdef object < handle
properties ( GetAccess = 'public', SetAccess = 'private' )
id
end
methods ( Access = 'protected' )
function obj = object()
obj.id = object.increment();
end
end
methods ( Static, Access = 'private' )
function result = increment()
persistent stamp;
if isempty( stamp )
stamp = 0;
end
stamp = stamp + uint32(1); …Run Code Online (Sandbox Code Playgroud) 关于构造函数在PHP中如何工作,我有点困惑.
我有一个带有构造函数的类,当我实例化一个新对象时会调用它.
$foo = new Foo($args);
Run Code Online (Sandbox Code Playgroud)
__construct($params)在类中调用Foo它并执行适当的初始化代码.
但是,当我使用该类调用静态函数时,将再次调用构造函数.
$bar = Foo::some_function(); //runs the constructor from Foo
Run Code Online (Sandbox Code Playgroud)
这会导致构造函数执行,运行我打算仅在创建新Foo对象时使用的对象初始化代码.
我是否忽略了构造函数的工作原理?或者有什么方法可以防止__construct()在我使用类进行静态函数调用时执行?
我应该使用"工厂"功能来进行对象初始化吗?如果是这样,构造函数的重点是什么呢?
::编辑::我有一个表单,用户可以将照片上传到相册(create_photo.php)和他们可以查看相册的区域(view_photos.php).提交表格时:
$photo = new Photo($_FILES['photo'], $_POST['arg1'], ect..);
Run Code Online (Sandbox Code Playgroud)
Photo构造函数创建并保存照片.但是在view_photo.php中,当我打电话时:
$photo = Photo::find_by_id($_POST['id']) //user-defined function to query database
Run Code Online (Sandbox Code Playgroud)
这导致Photo的构造函数运行!
我想做这样的事情:
interface Serializable<FromType, ToType> {
fun serialize(): ToType
companion object {
abstract fun deserialize(serialized: ToType): FromType
}
}
Run Code Online (Sandbox Code Playgroud)
甚至这对我有用:
interface Serializable<ToType> {
fun serialize(): ToType
constructor(serialized: ToType)
}
Run Code Online (Sandbox Code Playgroud)
但都没有编译.是否有这样的语法,或者我将被迫使用make this作为工厂的接口? 或者还有另一个答案吗?那很整洁!
为什么大多数设备驱动程序中的每个功能都是静态的?由于静态函数在文件范围之外不可见.那么,这些驱动程序函数如何被用户空间应用程序调用?
我有一个基类和派生的基本类,我想更改基本函数,同时保持它们是静态的,因为它们应该作为静态传递给其他函数.
我怎样才能做到这一点?
c++ inheritance c++builder virtual-inheritance static-functions
static-functions ×10
c++ ×5
c ×2
static ×2
abstract ×1
c++builder ×1
class ×1
constructor ×1
inheritance ×1
interface ×1
kotlin ×1
linux-kernel ×1
matlab ×1
matlab-class ×1
namespaces ×1
oop ×1
php ×1