Я получал странную ошибку от gcc и не могу понять, почему. Я сделал следующий пример кода, чтобы сделать проблему более ясной. По сути, есть определенный класс, для которого я делаю его конструктор копирования и оператор присваивания закрытыми, чтобы предотвратить их случайный вызов.
#include <vector>
#include <cstdio>
using std::vector;
class branch
{
public:
int th;
private:
branch( const branch& other );
const branch& operator=( const branch& other );
public:
branch() : th(0) {}
branch( branch&& other )
{
printf( "called! other.th=%d\n", other.th );
}
const branch& operator=( branch&& other )
{
printf( "called! other.th=%d\n", other.th );
return (*this);
}
};
int main()
{
vector<branch> v;
branch a;
v.push_back( std::move(a) );
return 0;
}
Я ожидаю, что этот код скомпилируется, но он не работает с gcc. На самом деле gcc жалуется, что "ветвь ::ветвь (const branch& )является частной", которую, как я понимаю, не следует называть.
Оператор присваивания работает, так как если я заменю тело main ()на
branch a;
branch b;
b = a;
Он скомпилируется и запустится, как и ожидалось.
Это правильное поведение gcc? Если да, то что не так с приведенным выше кодом? Любое предложение полезно для меня. Благодарю вас!
-121 ---779501 -Попытка использовать Timer
для выполнения этого 4 раза с интервалом в 10 секунд каждый.
Я попытался остановить его с помощью цикла, но он продолжает падать. Пробовал использовать schedule()
с тремя параметрами, но не знал, где реализовать переменную-счетчик. Любые идеи?
final Handler handler = new Handler();
Timer timer2 = new Timer();
TimerTask testing = new TimerTask() {
public void run() {
handler.post(new Runnable() {
public void run() {
Toast.makeText(MainActivity.this, "test",
Toast.LENGTH_SHORT).show();
}
});
}
};
int DELAY = 10000;
for (int i = 0; i != 2 ;i++) {
timer2.schedule(testing, DELAY);
timer2.cancel();
timer2.purge();
}