本文整理汇总了C++中CharString::c_str方法的典型用法代码示例。如果您正苦于以下问题:C++ CharString::c_str方法的具体用法?C++ CharString::c_str怎么用?C++ CharString::c_str使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类CharString
的用法示例。
在下文中一共展示了CharString::c_str方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: nm
//.........这里部分代码省略.........
INTERNAL_IF( np->GetChildPackage(0)->GetPackageID() != NAME );
NameManager nm( GetPackageName(*np->GetChildPackage(0)), bindTable );
entry = IsSymbolTable(nm);
if( !entry )
throw 0;
qualifierList.AddSymbolTable(entry);
i = 1;
}
// цикл спецификации имени: сохраняем области видимости из
// пакетов в список и получаем список ролей последнего имени
// 'i' задается выше, при считывании начальной области видимости
for( ;; )
{
// пакет должен быть '::' и следом за ним должно идти имя
INTERNAL_IF( np->GetChildPackage(i)->GetPackageID() != COLON_COLON );
i++;
register int pid = np->GetChildPackage(i)->GetPackageID();
INTERNAL_IF( i == np->GetChildPackageCount() ||
(pid != NAME && pid != PC_OVERLOAD_OPERATOR && pid != PC_CAST_OPERATOR &&
pid != PC_DESTRUCTOR) );
// получаем имя из последней полученной области видимости,
// причем поиск нового имени производится именно в ней, без учета дружеских
// областей видимости
CharString name = GetPackageName(*np->GetChildPackage(i));
const SymbolTable *lastSt =
&qualifierList.GetSymbolTable(qualifierList.GetSymbolTableCount()-1);
// есть один момент. Если lastSt - классовая область видимости и
// name - такое же как имя класса, просто возвращаем список конструкторов
// класса и выходим
if( lastSt->IsClassSymbolTable() &&
i == np->GetChildPackageCount()-1 &&
static_cast<const ClassType *>(lastSt)->GetName() == name )
{
INTERNAL_IF( !roleList.empty() );
// загружаем список конструкторов в список ролей
const ConstructorList &cl =
static_cast<const ClassType *>(lastSt)->GetConstructorList();
for( ConstructorList::const_iterator p = cl.begin(); p != cl.end(); p++ )
roleList.push_back( RolePair((ConstructorMethod*)*p, R_CONSTRUCTOR) );
// если список пуст, ошибка
if( cl.empty() )
theApp.Error(
ParserUtils::GetPackagePosition((NodePackage*)np->GetChildPackage(i)),
"'%s' - конструктор еще не объявлен", name.c_str());
break;
}
NameManager stm( name, lastSt, false ); // получаем список ролей имени
// если мы имеем последний идентификатор, т.е.
// то, что нам нужно в конечном итоге найти - получаем список
// его ролей и выходим. В случае если у имени нет ролей (не найдено),
// все равно цикл обработки считается успешным, но выводится ошибка
if( i == np->GetChildPackageCount()-1 )
{
roleList = stm.GetRoleList();
synonymList = stm.GetSynonymList();
if( roleList.empty() )
theApp.Error(
ParserUtils::GetPackagePosition((NodePackage*)np->GetChildPackage(i)),
"'%s' - идентификатор не найден в области видимости '%s'",
name.c_str(),
dynamic_cast<const Identifier *>(lastSt)->GetQualifiedName().c_str() );
break; // цикл окончен
}
// иначе имя должно быть областью видимости, добавляем ее в
// список квалификаторов имени
else if( const SymbolTable *st = IsSymbolTable(stm) )
qualifierList.AddSymbolTable(st);
// иначе возбуждаем исключительную ситуацию для вывода ошибки
else
throw i;
i++;
}
// ошибки типа имя не является областью видимости, в параметре
// индекс пакета в котором содержится имя
} catch( int pkgIx ) {
// освобождаем память занятую списками и выводим ошибку
roleList.clear();
qualifierList.Clear();
synonymList.clear();
LexemPackage *lp = (LexemPackage *)np->GetChildPackage(pkgIx);
theApp.Error( lp->GetLexem().GetPos(),
"'%s' не является квалификатором области видимости",
lp->GetLexem().GetBuf().c_str() );
}
}