Предположим, у вас есть большой проект, написанный на c ++, который содержит тысячу файлов .cpp и тысячу файлов .h. И давайте предположим, что проект также зависит от десяти статических библиотек. Скажем, мы работаем над Windows, и мы строим наш проект в Visual Studio 20xx. Когда вы нажимаете Ctrl + F7 Visual Studio, чтобы начать компиляцию всего решения (предположим, что у нас есть только один проект в решении)
В чем смысл компиляции?
Второй этап компиляции выполняется Linker.Linker должен объединить весь объектный файл и построить окончательно вывод (который может быть исполняемым или библиотекой)
Шаги по связыванию проекта
error LNK2001: unresolved external symbol "void __cdecl foo(void)" (?foo@@YAXXZ)
Наблюдение
Как решить эту ошибку
Ошибка времени компилятора:
Ошибка времени компоновщика
#pragma once
, чтобы компилятор не включал один заголовок если он уже был включен в текущий .cpp, который скомпилирован Попробуйте, это может сработать,
^(?:([A-Za-z])(?!.*\1))*$
Объяснение
Assert position at the beginning of a line (at beginning of the string or after a line break character) «^»
Match the regular expression below «(?:([A-Z])(?!.*\1))*»
Between zero and unlimited times, as many times as possible, giving back as needed (greedy) «*»
Match the regular expression below and capture its match into backreference number 1 «([A-Z])»
Match a single character in the range between “A” and “Z” «[A-Z]»
Assert that it is impossible to match the regex below starting at this position (negative lookahead) «(?!.*\1)»
Match any single character that is not a line break character «.*»
Between zero and unlimited times, as many times as possible, giving back as needed (greedy) «*»
Match the same text as most recently matched by capturing group number 1 «\1»
Assert position at the end of a line (at the end of the string or before a line break character) «$»
Вы можете проверить, есть ли в строке два экземпляра символа:
^.*(.).*\1.*$
(я просто просто захватил один из символов и проверял, есть ли у него копия в другом месте с обратной ссылкой. остальные .*
не интересуются).
Если регулярное выражение выше соответствует, то строка имеет повторяющийся символ. Если вышеописанное выражение не совпадает, то все символы уникальны.
Хорошая вещь о регулярном выражении выше, когда механизм регулярных выражений не поддерживает внешний вид.
По-видимому Решение John Woo - прекрасный способ проверить уникальность непосредственно. Он утверждает на каждом символе, что строка впереди не будет содержать текущий символ.