可能重复:
如果我尝试这样做,你知道为什么会出现错误吗:
public class Bar
{
public Bar(Foo foo)
{
}
}
public class Foo
{
private Bar _bar = new Bar(this);
}
我收到一个错误,说:
“不能在成员初始值设定项中使用'this‘”
但是下面的方法是可行的:
public class Foo
{
private Bar _bar;
public Foo()
{
_bar = new Bar(this);
}
我正在重新初始化一个局部类的成员变量,并且得到了一个编译错误。这里出了什么问题?为什么这个不能编译呢?谢谢!
这将不会编译
public class TestSomething {
public void someMethod(){
class LocalClassInner{
int i=100; // Error on this line.Syntax error on token ";", , expected
i=200;
}
}
}
这段代码编译得很好。
public class TestSom
构造函数是按照从上到下的顺序执行的,即首先执行base,然后是派生的。这种安排基于一个重要的OOP保证,即对象(这里是base)在使用之前必须始终被初始化(这里是在派生类的构造函数中)。
我想知道为什么字段初始化器在C#中不遵循这个原则?我是不是漏掉了什么?
我在字段初始化器中也发现了这个原则的用处。我有一个基类,它有一个返回Identity对象的属性。每个派生类都有自己的仓库字段,我已经使用字段初始化器(使用默认构造函数)对其进行了初始化。最近,我决定还必须为repository类提供Identity对象,因此我在存储库构造函数中引入了一个额外的参数。但我坚持要找出答案:
public cl
我知道还有其他的方法可以给猫换皮,但我希望有人能帮助我理解为什么在C#中,当内联实例化一个“主”对象时,我不能直接设置子类属性。
例如,如果我有以下类:
public class SubClass
{
public string SubField { get; set; }
}
public class MainClass
{
public string MainField { get; set; }
public SubClass Sub { get; set; }
public MainClass()
{
Sub = new SubClass();
}
如果我用默认构造函数声明一个类,并用初始化列表定义这个类的一个实例,如下所示,这个定义会调用默认构造函数吗?为什么会被调用或者没有被调用?
class Sample
{
// this should be any aggregate type in c++
};
int main()
{
Sample s = {0};
return 0;
}
我正在做一个大型项目,在整个代码中,我们有类typedef,基类,并在初始化器列表中调用它的构造函数。为什么会这样呢?我在下面构建了一个示例,展示了通常要做的事情。据我所知,构造函数之间没有区别。好处是什么?我尝试了一下谷歌,但没有得到任何结果。
#include <stdio.h>
class A
{
public:
A()
{
printf("A Constructed\n");
}
};
class B : public A
{
public:
typedef A super;
B
我偶然发现了
namespace ClassLibrary3
{
public class Class1
{
public int a { get; set; }
public int A { get; set; }
}
public class test : Class1
{
a=1; // error 'ClassLibrary3.Class1.a' is a 'property' but is used like a 'type'
pu
这个问题与相关。
正如我在上一个问题中提到的,我已经决定从Win structure BITMAP继承我的类,以提供一些扩展功能。
我注意到了编译程序行为的一些有趣的细节。首先,我为我的类定义了默认构造函数,如下所示:
CPreviewFrame::CPreviewFrame():
m_bufferSize( 0 )
{
bmBits = NULL; //ensure that compiler in debug won't init it with 0xccccc... and delete[] will do the job
}
在idea中,编译器必须生成调用基类型的
我最近一直在学习C#中的对象初始化器,但现在我想知道当它与构造函数冲突时它是如何工作的。
public class A
{
public bool foo { get; set; }
public A()
{
foo = true;
}
public A(bool bar)
{
foo = bar;
}
}
当我尝试这个的时候会发生什么?
public class B
{
private A a = new A() { foo = false };
private A b = new
在这里,我陷入了与C#中实例方法/属性的作用域的区别的绝境。代码如下:
public class Base
{
public EventHandler Click {get;set;}
public Base(EventHandler clickHandler)
{
this.Click = clickHandler;
}
}
public class Derived: Base
{
public Derived(): base((sender, e) => Execute())
{
}
private void Execu
我有一个类,当我试图在另一个类中使用它时,我收到了下面的错误。
using System;
using System.Collections.Generic;
using System.Linq;
namespace MySite
{
public class Reminders
{
public Dictionary<TimeSpan, string> TimeSpanText { get; set; }
// We are setting the default values using the Costructor
在Apple LLVM版本7.3.0上,对包含结构初始化成员的结构实例进行统一初始化后,我发现了以下错误:
error: no matching constructor for initialization of 'Foo'
以下是代码示例:
struct Foo
{
int foo1 = 0;
int foo2;
};
int main()
{
Foo foo{0, 1};
}
似乎结构初始化抑制了初始化器列表结构构造函数的生成。为什么?
我的类中有一个名为items的数组。在创建MyClass类型的对象时,我需要调用参数化构造函数Member(int value)。如何做到这一点?
class Member
{
public:
Member();
Member(int value)
{
dummy = value * 2;
}
~Member();
private:
int dummy;
}
class MyClass
{
public:
MyClass();
~MyClass();
private:
Member items[10]
我在尝试运行下面的示例时遇到运行时异常。
Unhandled Exception: System.InvalidOperationException: The current SynchronizationContext may not be used as a TaskScheduler.
at System.Threading.Tasks.SynchronizationContextTaskScheduler..ctor()
at System.Threading.Tasks.TaskScheduler.FromCurrentSynchronizationContext()
以下C#代码无法编译。
public class BaseType
{
public BaseType(int bar)
{
// Do stuff with bar...
}
}
public class DerivedType : BaseType
{
private int foo;
public DerivedType() : base(foo = 0) {}
}
该错误发生在调用DerivedType的基构造器时,并显示消息"Cannot access non-static field 'foo‘in sta
我有一个定义为这样的纯虚拟类:
class BaseClass {
protected:
const int var;
public:
void somefun() = 0; // what I mean by a purely virtual class
// stuff...
};
如果我没有添加这样定义的构造函数:
BaseClass(const int & VAR) : var(VAR) {};
我的派生类不能将常量变量var初始化为任何它想要的值。现在我真的明白是怎么回事了。在构造派生类之前,调用基类的构造函数,此时必须初始化常量成员变量。我的问题不是“我如何
我正在尝试发现初始化发生的顺序,或者更确切地说,是初始化以这种顺序发生的原因。给定代码:
public class Main {
{
System.out.printf("NON-STATIC BLOCK\n");
}
static{
System.out.printf("STATIC BLOCK\n");
}
public static Main m = new Main();
public Main(){
System.out.printf("MA
我正在努力学习如何使用常量函数和对象,然而,我有一些错误,让我一个多小时都睡不着觉,我似乎无法弄清楚。我在遵循一个简单的例子,我想我在路上的某个地方迷路了。这是我的代码。
Main.cpp
#include <iostream>
#include "ExampleClass.h"
int main(){
ExampleClass exampleObj; // object used to call members of ExampleClass.
exampleObj.printText(); // calls printVar from the
我正在开发一个代理,对于带有引用类型参数的泛型类来说,速度非常慢。特别是对于泛型方法(对于刚刚返回null的简单泛型方法,大约为400ms vs 3200ms)。我决定试着看看,如果我用C#重写生成的类,它的性能会如何,它的性能要好得多,与我的非泛型类代码的性能大致相同。
下面是我编写的C#类::(注意,我更改了命名方案,但并不是很多)::
namespace TestData
{
public class TestClassProxy<pR> : TestClass<pR>
{
private InvocationHandler<
Get error 'ClassLibrary3.Class1.a‘是一个' property’,但当我想要访问基类的属性时,它就像一个'type‘一样使用。
namespace ClassLibrary3
{
public class Class1
{
public int a { get; set; }
public int A { get; set; }
}
public class test : Class1
{
a=1;
我试图创建一个在参数中包含int的对象,即将值发送到另一个类,在另一个类的构造函数中将int的值设置为私有int,并使用私有int来设置数组的大小,但我没有这样做……有人知道为什么吗?下面是我的意思的一个例子,我想将数组大小设置为10。
main class: Car bmw = new Car(10);
Car class: public Car (int x)
{ y = x;}
private int y;
private String[] carArray= new String[y];
假设我们有这样的代码:
class A {
public:
A() = default;
A(const A&) = delete;
~A() = default;
};
class B {
public:
B() : a{} { }
A a[1];
};
int main()
{
B b;
}
此代码在最新的GCC 9.2、Clang 9.2和MSVC 19.22上编译。
但是,当我将默认析构函数更改为~A() { }时,GCC返回错误use of deleted function 'A::A(co
为什么我可以在System.Web.UI.Page实例中访问Page_Load方法中的Session对象,而不能在其他地方访问?
public partial class Statystyki : System.Web.UI.Page
{
// Session object not allowed here
protected void Page_Load (object sender, EventArgs e)
{
// but allowed here
}
}
并且在自定义类中不允许
我创建了一个简单的程序来测试智能指针。我开始使用标准库,但后来我想使用boost。我有这样的编译问题:
In file included from main.cpp:1:0:
test.hpp:14:21: error: ‘p’ is not a type
shared_ptr<int>a (p);
^
我的文件和makefile:
test.hpp:
#include <string>
#include <stdlib.h>
#include <vector>
#include <memory>
在C#中,常量意味着静态,因此您可以引用公共常量,而不必引用类或结构的实例。在C++中,情况并非如此。如果想要访问C++中的常量成员变量,首先需要有一个对类实例的引用。据我所知,在C++中,创建成员变量const会导致其数据被替换为文字值,或者存储在程序的文本或数据段中(取决于编译器)。所以我的问题是,如果常量成员变量只为给定的类(而不是每个实例)分配一次,并且存储在与实例特定的成员数据分开的区域中,为什么不能在不引用类的实例的情况下访问公共常量类成员变量,例如: struct Example {
const int array[] = {1, 2, 3};
};
void main