相关疑难解决方法(0)

构造函数中的虚函数,为什么语言不同?

在C++中,当从构造函数中调用虚函数时,它的行为不像虚函数.

我认为第一次遇到这种行为的每个人都感到惊讶,但第二次认为这是有意义的:

只要派生的构造函数没有被执行的对象是不是又一个衍生实例.

那么如何调用派生函数呢?前提条件没有机会建立.例:

class base {
public:
    base()
    {
        std::cout << "foo is " << foo() << std::endl;
    }
    virtual int foo() { return 42; }
};

class derived : public base {
    int* ptr_;
public:
    derived(int i) : ptr_(new int(i*i)) { }
    // The following cannot be called before derived::derived due to how C++ behaves, 
    // if it was possible... Kaboom!
    virtual int foo()   { return *ptr_; } 
};
Run Code Online (Sandbox Code Playgroud)

它与Java和.NET完全相同,但他们选择了另一种方式,并且可能是最不惊讶原则的唯一原因?

你认为哪个是正确的选择?

.net c++ java language-agnostic

12
推荐指数
2
解决办法
3714
查看次数

不可为空的实例字段必须被初始化

class Foo {
  int count; // Error
  void bar() => count = 0;
}
Run Code Online (Sandbox Code Playgroud)

为什么我已经在bar方法中初始化它时看到错误?如果count被标记为 ,我可以理解这个错误final

dart dart-null-safety

12
推荐指数
2
解决办法
2万
查看次数

错误:实例成员...无法在初始化程序中访问

为什么这段代码:

class _SequentialTextPageState {
  String jsonTextPref = 'seqtext';
  int jsonTextSuff = 10;
  String jsonText = jsonTextPref + jsonTextSuff.toString();
}
Run Code Online (Sandbox Code Playgroud)

产生这些错误?

Error: The instance member 'jsonTextPref' can't be accessed in an initializer.

Error: The instance member 'jsonTextSuff' can't be accessed in an initializer.
Run Code Online (Sandbox Code Playgroud)

在我看来,String和之间的串联int是正确的吗?

dart

10
推荐指数
2
解决办法
1万
查看次数

Dart:为什么继承的字段不能用作构造函数参数?

以下代码将不会运行:

class X{
 double? x;
}

mixin Y{
 double? y;
}

class Z extends X with Y {
 double? z; 
 Z(this.x, this.y, this.z)
}
Run Code Online (Sandbox Code Playgroud)

编译器会抱怨 this.x 和 this.y 不是封闭类中的字段:

lib/physicalObject.dart:20:10: Error: 'x' isn't an instance field of this class.
Z(this.x, this.y, this.z)
     ^

lib/physicalObject.dart:20:18: Error: 'y' isn't an instance field of this class.
Z(this.x, this.y, this.z)
             ^
Run Code Online (Sandbox Code Playgroud)

当然这不是真的,字段x和y是从父类和mixin继承的。我可以在子类 Z 中使用这些字段,似乎只有构造函数在接受这些字段作为参数时存在问题。但为什么?

inheritance mixins dart

5
推荐指数
1
解决办法
1563
查看次数

在 Dart 中使用 Setter 和构造函数

如何从 Dart 的默认构造函数中使用私有实例变量的 setter?

给定示例类:

class A {
  String name;
  int _age;

  int get age => _age;

  set age(age) {
    _age = age ?? 0;
  }

  A(this.name, this._age);
}
Run Code Online (Sandbox Code Playgroud)

我如何使用这个构造函数来遍历该set age()函数?除了使用 a 之外还有什么办法factory吗?我想做这样的事情

A(this.name, newAge): age = newAge;
Run Code Online (Sandbox Code Playgroud)

但是我收到一个错误,迫使我只从构造函数中设置实例变量,这让我只需复制设置器:

A(this.name, newAge): _age = newAge ?? 0;
Run Code Online (Sandbox Code Playgroud)

我是否遗漏了一些东西,或者这对于 dart 来说是不可能的?

dart flutter

3
推荐指数
1
解决办法
2096
查看次数

Dart 立即分配给变量还是在构造函数中?

在 Dart 中,立即赋值与在 Java 中的构造函数中是否有区别?

class Example {
    int x = 3;
}
Run Code Online (Sandbox Code Playgroud)

对比

class Example {
    int x;
    Example() {
        x = 3;
    }
}
Run Code Online (Sandbox Code Playgroud)

我问是因为当我使用 Flutter 并尝试将一个使用 setState 的函数分配给一个变量时,前一种方法是不可能的,但后一种方法是可能的。

dart flutter

3
推荐指数
1
解决办法
1685
查看次数

为什么会发生此错误:无法在初始化程序中访问实例成员“*”。”?

我来自 python 背景,试图学习类似 java 的语言。这是用 dart 编写的,用于颤振。

当我尝试运行以下命令时出现错误。

class _MyGameState extends State<MyGame> {
  int _numberOfTeams = 4;

  List<int> _teamPoints = List.filled(_numberOfTeams, 0);
Run Code Online (Sandbox Code Playgroud)

我得到的错误信息是:

无法在初始化程序中访问实例成员“_numberOfTeams”。尝试用不同的表达式替换对实例成员的引用

为什么会这样,如何避免呢?(显然,这个例子被简化了,我可以很容易地简单地省略变量_numberOfTeams并规避问题,但这不是重点。)

(这里有很多非常相似的问题。这些问题的所有答案都提供了解决特定问题的方法,但不是“为什么”会出现问题或在用这种常见的语言写作时如何思考。一些相关的搜索我可以查看的词,或者指南/教程/文章的链接将不胜感激:)

initialization instance dart flutter

1
推荐指数
1
解决办法
327
查看次数

如何在构造函数体中初始化不可为空的成员?

我已经以这种方式在 Dart 中创建了我的类,但是我Non-nullable instance field 'text' must be initialized. Try adding an initializer expression, or add a field initializer in this constructor, or mark it 'late'.想知道是否有一种方法可以以“Python”风格来创建这种类,在此先感谢您。

class Lexer {
  String _text;
  int _pos;
  String _current_char;

  Lexer(String text) {
    this._text = text;
    this._pos = -1;
    this._current_char = '';
    this.advance();
  }

  void advance() {
    this._pos++;
    this._current_char = this._pos < this._text.length ? this._text[this._pos] : '';
  }
}
Run Code Online (Sandbox Code Playgroud)

dart

0
推荐指数
1
解决办法
2233
查看次数