Привет, совершенно не понимаю что происходит и что я делаю не так, поэтому опишу поэтапно:
для начала имею такой код:
#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 запустить отладчик, поставив брейкпоинт на вызове это функции. Получаю вот такую ошибку:
Прочитал, что это вроде как косяк студии и надо пересобрать проект. Во время пересборки, внезапно, получаю ошибку на обе функции, что они уже определены в этом файле (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;
//
//}
После снова пытаюсь изменить знак на другой и снова он не меняется, выводятся теперь ранее указаные пятерки.
Пересобираю еще раз и в этот раз он уже (вовремя) ругается на то, что я ссылаюсь на неразрешенную функцию
Короче требует ее объявить, что я и делаю, раскомментировав функции, и снова все работает, выводится новый указанный знак, после чего мы возвращаемся в самое начало этого вопроса и в ту же ситуацию. Чтобы изменить знак, мне нужно удалить функцию и пересобрать проект, после снова ее объявив.
Буду благодарен, если подскажите что это такое и как с ним бороться!