Вот программа, которая компилируется без предупреждения, например, на GNU C ++:
$ g++ -o t -Wall -pedantic -Wshadow t.cpp
$ ./t.exe
Calling barney::barney()
Calling foo::operator()()
Calling barney::barney()
Но она полностью не компилируется на MSVC ++:
$ cl /EHsc t.cpp
Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 15.00.30729.01 for 80x86
Copyright (C) Microsoft Corporation. All rights reserved.
t.cpp
t.cpp(17) : error C2380: type(s) preceding 'fred' (constructor with return type, or illegal redefinition of current class-name?)
t.cpp(17) : error C2208: 'fred' : no members defined using this type
Более того, когда она компилируется, результат не такой, как я ожидал. Может ли кто-нибудь пролить свет на то, каким должно быть стандартное поведение этого кода ?
Вот он:
#include
using ::std::cerr;
struct fred;
struct foo {
inline fred operator ()();
};
struct barney {
barney() : v_(0) { cerr << "Calling barney::barney()\n"; }
int v_;
};
struct fred : public barney {
foo fred;
int joe;
struct fred memfunc() { return fred(); }
};
inline fred foo::operator ()()
{
cerr << "Calling foo::operator()()\n"; return fred();
}
int main(int argc, const char *argv[])
{
fred f;
f.memfunc();
return 0;
}
Он выводит следующее:
Calling barney::barney()
Calling foo::operator()()
Calling barney::barney()
Но я ожидал этого:
Calling barney::barney()
Calling barney::barney()
Почему я получаю вывод я делаю? Это стандартное поведение? Если да, то почему, какие разделы стандарта имеют отношение к делу?
В дополнение к принятому ответу Дэвид Родригес дал отличный ответ , подробно описав, где в стандарте говорится, что я разрешено объявить член с именем fred
из struct fred
.
Теперь я получаю ошибку «Not Null» при использовании метода save (), потому что created_by пуст. Я попытался добавить ...
У меня есть форма модели, и я исключил два поля: create_date
и created_by
. Теперь я получаю ошибку «Not Null» при использовании метода save ()
, потому что created_by
пуст.
Я пытался добавить идентификатор пользователя в форму раньше метод save ()
выглядит следующим образом: form.cleaned_data ['created_by'] = 1
и form.cleaned_data ['created_by_id'] = 1
. Но ничего из этого не работает.
Может кто-нибудь объяснить мне, как я могу "добавить" дополнительные данные для представленной формы модели, чтобы она сохранялась?
class Location(models.Model):
name = models.CharField(max_length = 100)
created_by = models.ForeignKey(User)
create_date = models.DateTimeField(auto_now=True)
class LocationForm(forms.ModelForm):
class Meta:
model = Location
exclude = ('created_by', 'create_date', )