Emacs, завершение кода C++ для векторов

Я новичок в Emacs, и в качестве образца у меня есть следующий код. Я установил GNU Emacs 23.1.1 (i386-mingw-nt6.1.7600), установлен cedet-1.0pre7.tar.gz., установил ELPA и компания. Вы можете найти мою простую конфигурацию Emacs внизу.

Проблема в том, что когда я набираю q[0] в main() и нажимаю . (точка), я вижу 37 элементов vector, а не Person, хотя ожидаются first_name и last_name. Завершение работает, как и ожидалось, в функции greet(), но оно не имеет ничего общего с вектором.

Мой вопрос: как я могу выполнить завершение кода и для векторных элементов?

#include <iostream>
#include <vector>
using namespace std;

class Person
{
  public:
    string first_name;
    string last_name;
};

void greet(Person a_person)
{
  // a_person.first_name is completed as expected!
  cout << a_person.first_name << "|";
  cout << a_person.last_name << endl;
};

int main()
{
  vector<Person> q(2);

  Person guy1;
  guy1.first_name = "foo";
  guy1.last_name = "bar";

  Person guy2;
  guy2.first_name = "stack";
  guy2.last_name = "overflow";

  q[0] = guy1;
  q[1] = guy2;
  greet(guy1);
  greet(guy2);
  // cout q[0]. I want to see first_name or last_name here!
}

Моя конфигурация Emacs:

;;; This was installed by package-install.el.
;;; This provides support for the package system and
;;; interfacing with ELPA, the package archive.
;;; Move this code earlier if you want to reference
;;; packages in your .emacs.
(when
    (load
     (expand-file-name "~/.emacs.d/elpa/package.el"))
  (package-initialize))

(load-file "~/.emacs.d/cedet/common/cedet.el")
(semantic-load-enable-excessive-code-helpers)
(require 'semantic-ia)

(global-srecode-minor-mode 1)
(semantic-add-system-include "/gcc/include/c++/4.4.2" 'c++-mode)
(semantic-add-system-include "/gcc/i386-pc-mingw32/include" 'c++-mode)
(semantic-add-system-include "/gcc/include" 'c++-mode)


(defun my-semantic-hook ()
  (imenu-add-to-menubar "TAGS"))
(add-hook 'semantic-init-hooks 'my-semantic-hook)

person Caglar Toklu    schedule 12.03.2010    source источник


Ответы (2)


Это известная проблема семантического анализатора. В настоящее время я не могу разобраться с специализацией шаблонов, которая используется в gcc STL (ваша проблема связана с от такой специализации в allocator.h). Это обсуждалось в списке рассылки:

http://thread.gmane.org/gmane.emacs.semantic/2137/focus=2147

person pokita    schedule 12.03.2010
comment
Спасибо pokita, по крайней мере теперь я знаю, что это не мое незнание Emacs и CEDET. - person Caglar Toklu; 13.03.2010

GCCSense

Пример завершения кода C++ в Emacs:

скриншот emacs gccsense

person jfs    schedule 17.04.2010
comment
Спасибо, я вижу, что Windows не поддерживается, но я буду использовать его в Ubuntu, это нечто. - person Caglar Toklu; 19.04.2010
comment
Я использую emacs для программирования на C++. Я использую CEDET и получаю один столбец, как я могу получить два столбца, как в этом примере? - person Eagle; 28.01.2011
comment
@Eagle: на скриншоте показаны возможности GCCSense. Я не знаю, можно ли подключить GCCSense к CEDET. - person jfs; 30.01.2011
comment
Версию для Windows можно найти здесь: forums.codeblocks.org/index .php/ Я предоставил исправление для gcc 4.5.2 и шаги по сборке версии gccsense для Windows. - person ollydbg23; 19.02.2011