Функция не реагирует на изменение аргумента + магия компиляции?

Привет, совершенно не понимаю что происходит и что я делаю не так, поэтому опишу поэтапно:
для начала имею такой код:
#include <iostream>
#include <bitset>
using namespace std;

void hborder_print(int, char = '*');
void vborder_text_print(string, short, char = '|');

namespace b2i {...}

void hborder_print(int len, char bord_symb ) {//printing horizontal border (line) of len <bord_symb> symbols
	string border(len, bord_symb);
	cout << border << endl;
}
void vborder_text_print(string text, short len, char bord_symb) {
	cout << bord_symb;
	for (int i = 0; i < len - 2 - text.length(); i++) cout << " ";
	cout << text << bord_symb << endl;

Внутри пространства имен определены функции, которые вызывают hborder_print и vborder_text_print, причем без передачи заранее определенных аргументов - символов. При компиляции в случае с hborder я действительно получаю в консоли строку из звездочек, после чего меняю это значение на любое другое, например '5' и сталкиваюсь с тем, что ничего не изменилось и выводятся все те же звездочки. И решаю в visual studio запустить отладчик, поставив брейкпоинт на вызове это функции. Получаю вот такую ошибку:bZXwUIB89W2l64fe2fc9abb8f470361586.png
Прочитал, что это вроде как косяк студии и надо пересобрать проект. Во время пересборки, внезапно, получаю ошибку на обе функции, что они уже определены в этом файле (LNK2005), хотя определены они все также один раз снизу. Решил закоментировать определение функций, оставив сверху только объявление их, и ,внезапно, он компилится и функция, которая в коде вообще нигде не описана работает, чудеса!
#include <iostream>
#include <bitset>
using namespace std;

void hborder_print(int, char = '*');
void vborder_text_print(string, short, char = '|');

namespace b2i {...}

//void hborder_print(int len, char bord_symb ) {//printing horizontal border (line) of len <bord_symb> symbols
//	string border(len, bord_symb);
//	cout << border << endl;
//}
//void vborder_text_print(string text, short len, char bord_symb) {
//	cout << bord_symb;
//	for (int i = 0; i < len - 2 - text.length(); i++) cout << " ";
//	cout << text << bord_symb << endl;
//
//}

После снова пытаюсь изменить знак на другой и снова он не меняется, выводятся теперь ранее указаные пятерки.
Пересобираю еще раз и в этот раз он уже (вовремя) ругается на то, что я ссылаюсь на неразрешенную функцию dfeCAcnKWYIZ 64fe3022ae225440916655.png
Короче требует ее объявить, что я и делаю, раскомментировав функции, и снова все работает, выводится новый указанный знак, после чего мы возвращаемся в самое начало этого вопроса и в ту же ситуацию. Чтобы изменить знак, мне нужно удалить функцию и пересобрать проект, после снова ее объявив.
Буду благодарен, если подскажите что это такое и как с ним бороться!
  • Вопрос задан
  • 108 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

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