回报C++断言失败我很新的C++所以请多多包涵......从不变的功能
我正在写一个包含的std :: string变量,我检查,如果一个类它是一个有效的C语言标识符。 有效的标识符开始以“_”或字母,然后继续字母,数字或_” 这个类由下面的类NamedObject和Foo
class Name{
std::string name;
protected:
virtual bool Inv(void) const{
if (name[0] >= 'A' && name[0] <= 'Z') return true;
if (name[0] >= 'a' && name[0] <= 'z') return true;
if (name[0] == '_') return true;
std::cout << "String input is not a valid identifier."<< std::endl;
return false;
}
public:
Name(){}
Name(std::string _name) : name(_name){ assert(Inv()); }
Name(Name& n) : name(n.name) { assert(Inv()); }
//more constructors and methods
};
class NamedObject{
Name objectsName;
public:
//Constructors & Destructor
NamedObject() : objectsName(Name()) {}
NamedObject(Name name) : objectsName(name) {}
~NamedObject() {}
//Accessors-Modifiers
const Name& Get(void) const { return objectsName; }
void Set(const Name name) { objectsName = name; }
};
class Foo : public NamedObject {
public:
Foo() : NamedObject() {}
Foo(Name name) : NamedObject(name) {}
~Foo();
};
当我尝试代码。:
Name n1("a_1");
Foo *f1 = new Foo(n1);
n1.Set("*a_2");
Foo *f2 = new Foo(n1);
我得到以下错误: 断言失败:INV()线64(第二断言的线) 我一直在试图找到INV问题(),但没有拿出任何东西。
更好地利用['标准::因而isalpha (char)'](http://en.cppreference.com/w/cpp/string/byte/isalpha)及其[兄弟姐妹](http://en.cppreference.com/w/cpp/string/byte) 。 – Walter 2015-02-07 16:25:04
代码是如何工作的? “n1.Set(” * A_2 “);”类名称没有称为Set的方法。该代码不应该编译。 – thang 2015-02-07 16:26:12
名称已设置和获取方法,我只是没有包括他们上面。 – Nena 2015-02-07 16:48:23