То, что Вы ищете, является псевдоэлементом, который не существует. Существует: первая буква и: первая строка, но нет: первое слово.
можно, конечно, сделать это с JavaScript. Вот некоторый код, я нашел, что это делает это: http://www.dynamicsitesolutions.com/javascript/first-word-selector/
Вы нарушаете одно правило определения , и компилятор / компоновщик не обязан сообщать вам об этом.
Добрый день,
Это не поведение редактора ссылок по умолчанию, чтобы взять первый символ, который удовлетворяет требованиям, и прекратить поиск.
Вы должны иметь возможность включить полный поиск, чтобы запретить повторяющиеся символы в закрытии исполняемого файла.
Edit: Я только что видел, что редактор ссылок в Solaris запрещает использование нескольких определений по умолчанию. На самом деле вам нужно использовать переключатель редактора ссылок "-z muldefs", чтобы разрешить связывание с несколькими определениями в объектах, используемых для закрытия исполняемого файла.
Edit2: Я заинтригован здесь, так как это должно быть быть помеченным как предупреждение. Что произойдет, если вы добавите
-std=c++98 -pedantic-errors
в командную строку при сборке исполняемого файла?
Другие уже говорили о Правиле одного определения, я подумал, что хотел бы дать какое-то объяснение и реальный обходной путь.
Объяснение :
Я не буду объяснять Одно правило определения, но я объясню, почему компоновщик не жалуется. Когда вы используете шаблоны, каждый объект получает свой собственный экземпляр std :: vector
. Компоновщик просто выбирает первый доступный.
Если бы это было не так, вам пришлось бы явно создать экземпляр шаблона в одном исходном файле, а затем использовать ключевое слово extern
в других ... но только Comeau поддерживает его.
Решение :
Поскольку я в основном предполагаю, что вы пытаетесь реализовать указатель на реализацию, у вас нет особого выбора, кроме пересылки.
Раньше сталкиваясь с подобными проблемами (как я ненавижу полагаться на Pimpl для упрощения зависимостей ...), я просто полагаюсь на соглашение об именах в сочетании с пространством имен, которое я повторно использую для деталей реализации:
namespace detail { class FooImpl; }
class Foo
{
typedef detail::FooImpl Impl; // note that the typedef is private
Impl* m_impl;
};
Простой и эффективный. Я всегда использую деталь
для деталей реализации и просто добавляю Impl
в конец имени класса, который должен быть Impl
.
Примечания :
предотвращают загрязнение основного пространства имен, в котором вы занимаетесь живет с этими символами, что особенно удобно для автозаполнения в среде IDE, поскольку в противном случае вы получили бы как предложения Foo
, так и FooImpl
.