объявить функцию класса inline [duplicate]

Я использую просто:

  import { NgZone } from '@angular/core';

  constructor(
    private zone: NgZone
  ) { super(); }


 getLocation(address: string): void {
  var mygc = new google.maps.Geocoder();
  var self = this;

  mygc.geocode({
    'address': address
  }, (results, status) => {

    var data: any = results[0];

    self.zone.run(() => {
      self.myObject.myData = {          
        lat: data.geometry.location.lat(),
        lng: data.geometry.location.lng()
      };
    });
});
26
задан Lightness Races in Orbit 24 February 2012 в 01:49
поделиться

3 ответа

Почему ошибка & amp; как его решить?

Вы должны указать определения для всех виртуальных функций в class A. Только чистые виртуальные функции не имеют определений.

, т. е.: В class A должны быть определены оба метода:

virtual ~A();
virtual void doWork();

(должен иметь тело)

например:

A.cpp

void A::doWork()
{
}
A::~A()
{
}

Предостережение: если вы хотите, чтобы ваш class A выступал в качестве интерфейса (aka Абстрактный класс в C ++), тогда вы должны сделать метод чистый виртуальный.

virtual void doWork() = 0;

Хорошо Чтение:

Что означает, что «виртуальная таблица» является нерешенным внешним? При создании C ++ компоновщик говорит, что мои конструкторы, деструкторы или виртуальные таблицы не определены.

63
ответ дан Community 21 August 2018 в 09:19
поделиться
  • 1
    Что вы имеете в виду? – rjmarques 23 February 2012 в 05:13
  • 2
    @ user1227351: Обновлен ответ, чтобы лучше объяснить. Читайте ссылки для дальнейшего объяснения. – Alok Save 23 February 2012 в 05:20
  • 3
  • 4
    Решением является размещение A :: ~ A () {} в Child.cpp – rjmarques 23 February 2012 в 05:57
  • 5
    С C ++ 11 вы можете использовать & quot; default & quot; чтобы компилятор выполнил задание. ex: virtual doSomething () = default; – Onur 15 May 2015 в 07:44

Обязательно удалите все файлы «* .gch», если ни один из ответов не поможет вам.

1
ответ дан ArchZombie0x Ryan P. Nicholl 21 August 2018 в 09:19
поделиться

Моя цель состоит в том, чтобы A был интерфейсом и разделял код реализации из заголовков.

В этом случае сделайте функцию-член чистой виртуальной в классе A.

class A {
  // ...
  virtual void doWork() = 0;
};
6
ответ дан Mahesh 21 August 2018 в 09:19
поделиться
  • 1
    Это приведет к удалению ошибки, если я также удалю деструктор. В этом случае, если я делаю: A a = new Child (); удалить a; какой деструктор он назвал бы? – rjmarques 23 February 2012 в 05:17
  • 2
    Уничтожение всегда в обратном порядке. В этом случае деструктор класса A должен быть виртуальным, который принудительно запускает деструктор Child, вызываемый сначала, а затем деструктором A. Если деструктор класса A не является виртуальным, поведение не определено. – Mahesh 23 February 2012 в 05:20
  • 3
    Он вызовет деструктор ребенка, поскольку вы сделали виртуальный дескриптор родительского класса. После этого деструктор родительского класса. – Izza 23 February 2012 в 05:22
  • 4
  • 5
    Решением является размещение A :: ~ A () {} в Child.cpp – rjmarques 23 February 2012 в 05:58
Другие вопросы по тегам:

Похожие вопросы: