← All posts tagged C++

folex
? C++ Qt

paste.pocoo.org

Linking CXX executable testTabs
CMakeFiles/testTabs.dir/testTabs.cpp.o: In function `TabbedMainWindow::TabbedMainWindow()':
testTabs.cpp:(.text+0x3a): undefined reference to `vtable for TabbedMainWindow'
testTabs.cpp:(.text+0x44): undefined reference to `vtable for TabbedMainWindow'
collect2: ld returned 1 exit status

Код говно, знаю.
Но вопрос не в этом. Почему оно не собирается?

folex

Эм. А почему если я делаю брейпойнт на создании некоторого объекта, после которого всё крешится, а потом много-много раз жму si в gdb, то всё выглядит так, будто крешится всё на стадии входа в конструктор, однако если после креша сделать up 1, оказывается, что мы уже далеко зашли в конструкторе, всё няшно видно, вот она ошибка, и всё такое.
ЧЯДНТ?

Предоставлю данные, которые помогут ответить ._.

folex

Сконвертировал тут в более-менее приглядный pdf второе издание Саммерфилда — C++ QT GUI programming.
В интернетах везде валяются только тупые переделки из chm в pdf с кучей повторяющихся страниц, а я их убрал.
dump.bitcheese.net

folex
? C++

Эм, жуйк, а как работает такой код:

using namespace std;

struct wtf
{
string str;
int integral;
};

int main()
{
vector<wtf> nya(10);
vector<wtf> nyan(20);
cout << "Enter\n";
for(int i = 0; i < nya.size(); ++i)
{
cin >> nya.at(i).str;
nya.at(i).integral = 4*i % 7 == 0 ? 4*i : 3*i + 7;
cout << "\n";
}
nyan.insert(nyan.begin(), nya.begin(), nya.end());
nyan.insert(nyan.end(), nya.begin(), nya.end());

return 0;
}

Конкретнее:
1. wtf — POD структура, т.е. копируется "as is", побитово.
2. У стринга есть работающие конструкторы и деструкторы. Если скопировать кучу стрингов побитово, то разве потом деструкторы не будут ругаться?
3. Не используется ли тут как-либо автоматически копирующий (или какой другой) конструктор стринга? И если используется, то КАК?

Спасибо.

folex

Как мы делаем конструктор по-умолчанию?
Структура класса такая:
class our
{
public:
our();
our load(string filename);
private:
int* m_data;
int size;
}

Конечно же вот так:
our::our(): size()
{
m_data = new int[size];
}

А ПОЧЕМУ НЕ РАБОТАЕТ?


Как мы пишем функцию load?
our our::load(string filename)
{
ifstream fname;
fname.open(filename.c_str());
our qq;
int sz;
fname >> sz;
qq.size = sz;
qq.m_data = new int[size];
return qq;
}

Затем в main() создаем "синглтон", с помощью которого инициализируем всё остальное:
our tt;
our a;
a = tt.load("shit");

А ПОЧЕМУ НЕ РАБОТАЕТ?!



Нуууууууу каааааак?

folex

ЧЗХ?
Делаю так:
#include <iostream>
#include <fstream>

using namespace std;

int main()
{
ifstream fname;
fname.open("ourFile");
int tmp;
while(!fname.eof())
{
fname >> tmp;
cout << tmp << endl;
if(fname.fail())
{
fname.clear(ios::goodbit);
fname.seekg(1, ios::cur);
}
}

return 0;
}
Если в файле есть несколько подряд идущих ascii символов, вместо них выводит нули.
Как мне ВООБЩЕ от них избавиться? Уже всё перепробовал. Сраные iostream::*bit не работает ни черта. ШТОДЕЛОЦ?

folex

ЧЯДНТ?!
BinarySet::BinarySet(std::vector<bool>& vec):
m_size((vec.capacity() % Bits == 0) ? vec.capacity()/Bits : vec.capacity()/Bits + 1),
m_realsize(vec.size() % Bits == 0 ? vec.size()/Bits : vec.size()/Bits + 1)),
m_pos(vec.size()), m_data(new binInt[m_size])
{
...
}

Где тут ошибка в синтаксисе?!

folex

map<string, path> paths;
for(directory_iterator it = directory_iterator(path); it != directory_iterator(); it++)
{
//paths.insert(fileMd5(it), it->path().filename());
//cout << it->path().filename();
}

Говорит, что expected primary expression перед скобками в for.
ЧЯДНТ?

folex

Жуйк, у меня вечно проблемы с #include.
Вот теперь компилит cppUnit тесты в объектник с тем же файлом, с которым компилит и другой объектник. В итоге multiple definition of ... .
Что мне с этим делать?
Код вот тут:
svn co mysvn.ru

цель для сборки тестов: build-tests
Спасибо.

folex

Делаю приватный класс внутри другого класса, затем пытаюсь сделать в верхнем классе поля-экземпляры внутреннего, конпелятор не дает. Говорит, что внутренний — не имя типа.
ЧЗХ?
pastie.org

folex
? C++

Эцсамое, а как правильно реализовывать возможность возвращать lvalue?
Пока все идеи, приходящие в голову, утыкаются в перегрузку operator=(myclass, value_type).
Однако не очень понятно мне, как сделать так, что бы можно было:
myclass obj;
int someval = //чему-то
obj.operator[](someval) = anotherval;
//Или
obj.at(someval) = anotherval;

Проблема в том, что иногда нужно возвращать rvalue, а иногда lvalue. Что делать?