Кодированный интерфейс - изменение сгенерированного ui кода карты? [Дубликат]

Объявлено, но не определено переменная или функция.

Типичным объявлением переменной является

extern int x;

. Поскольку это только объявление, требуется одно определение. Соответствующим определением будет:

int x;

Например, следующее генерирует ошибку:

extern int x;
int main()
{
    x = 0;
}
//int x; // uncomment this line for successful definition

Аналогичные замечания относятся к функциям. Объявление функции без ее определения приводит к ошибке:

void foo(); // declaration only
int main()
{
   foo();
}
//void foo() {} //uncomment this line for successful definition

Будьте осторожны, чтобы выполняемая вами функция точно соответствовала той, которую вы объявили. Например, у вас могут быть несогласованные cv-квалификаторы:

void foo(int& x);
int main()
{
   int x;
   foo(x);
}
void foo(const int& x) {} //different function, doesn't provide a definition
                          //for void foo(int& x)

Другие примеры несоответствий включают

  • Функция / переменная, объявленная в одном пространстве имен, определенное в другом.
  • Функция / переменная, объявленная как член класса, определяемая как глобальная (или наоборот).
  • Тип возвращаемого значения функции, номер и типы параметров и соглашение о вызове не совсем точно согласуются.

Сообщение об ошибке из компилятора часто дает вам полное объявление переменной или функции, которая была объявлена, но не определена. Сравните его с определением, которое вы указали. Убедитесь, что каждая деталь соответствует.

3
задан user2917239 30 October 2013 в 00:27
поделиться

3 ответа

Файл UIMap.designer.cs восстанавливается из файла UIMap.uitest после каждого редактирования (который сохраняется) в файле UIMap.uitest. В верхней части файла есть комментарий, в котором говорится, что это сгенерированный файл, и что изменения будут потеряны.

Большое количество изменений, которые, на первый взгляд, нуждаются в редактировании кода в дизайнере файл может быть выполнен путем редактирования с помощью панелей свойств действий и пользовательских интерфейсов, показанных в редакторе UIMap. Некоторые изменения требуют ручного редактирования. Для них есть команда (кнопка или контекстное меню), чтобы переместить действие в файл UIMap.cs, где он может быть отредактирован и расширен как можно больше. Оба этих файла UIMap ... cs указывают на partial в заголовках своих классов, поэтому оба они вносят вклад в один и тот же UIMap.

Когда только одно действие метода требует ручного редактирования, может стоить разбить этот метод на две или три части, чтобы поместить действие, требующее редактирования, в свой собственный метод. Команда split доступна через кнопку или в меню правой кнопки мыши. Выделив действие, его метод можно перенести в файл UIMap.cs.

При перемещении методов и последующем их редактировании я рекомендую следующий порядок действий.

  1. Если Необходимо: разбить метод на части, а затем переименовать методы разделения с помощью редактора UIMap. Сохраните файл UIMap.uitest, создав регенерацию файла конструктора. Затем добавьте вызовы для разделенных и переименованных методов. Постройте тест и, возможно, убедитесь, что тест по-прежнему работает, как ожидалось.
  2. Переместите метод в файл UIMap.cs с помощью редактора UIMap.
  3. Сохраните все файлы, вызывающие регенерацию файл дизайнера.
  4. Отредактируйте код, только что перемещенный в файл UIMap.cs.

Карта пользовательского интерфейса редактор является стандартным для Visual Studio 2012. Для Visual Studio 2010 редактор был добавлен Feature Pack 2.

7
ответ дан AdrianHHH 25 August 2018 в 09:51
поделиться

Откройте файл UIMap.uitest в Visual Studio и нажмите «Переместить код на UIMap.cs»

, ваша функция переместится с designer.cs - UiMap.cs

0
ответ дан Ragesh S 25 August 2018 в 09:51
поделиться

другой вариант - создать другой файл класса, например, создать Class1.CS и переместить весь код с UIMap.Designer.cs и UIMap.cs на Class1.cs. Теперь, когда вы записываете что-либо, регенерированный код будет автоматически сгенерирован в файле UIMap.Designer.cs, поэтому просто скопируйте тот же код в Class1.cs и при необходимости измените код, и при запуске основного теста просто вызовите this.Class1.launch();, он будет запускаться codedTest.

Это также избавит вас от расщепления методов в UIMap.uitest, а затем переместит его на UIMap.cs, и даже будет отдельный класс, включая все ваши изменения в codedUItest.

0
ответ дан rayryeng 25 August 2018 в 09:51
поделиться