Это ошибка VS2008? Инициализация переменной функционального стиля

В приведенном ниже коде строка

const char * const * eNames (names+cntNames);

приводит к C2061 ошибка в Visual Studio 2008:

синтаксическая ошибка: идентификатор «идентификатор» —
Компилятор нашел идентификатор, где он не ожидался.
Убедитесь, что идентификатор объявлен, прежде чем использовать его.
Инициализатор может быть заключен в круглые скобки.
Чтобы избежать этой проблемы, заключите декларатор в круглые скобки или сделайте его typedef.
Эта ошибка также может быть вызвана, когда компилятор обнаруживает выражение как класс
аргумент шаблона; используйте typename, чтобы сообщить компилятору, что это тип.

Если я изменю на

const char * const * eNames = names+cntNames;

это не жалуется. Это ошибка компилятора? Если нет, то почему жалоба?

В поле «О себе» написано: SP версии 9.0.30729.1

Мой коллега из GCC не видит эту ошибку.

#include <string>
#include <algorithm>
#include <functional>
#include <iostream>

namespace ns1 {

struct str_eq_to
{
str_eq_to(const std::string& s) : s_(s) {}
bool operator()(const char* x) const { return s_.compare(x)==0; }
const std::string& s_;
};

static bool getNameIndex(const char * const * names, size_t cntNames, const std::string& nm, int &result)
{
const char * const * eNames (names+cntNames);  //VS2008 error C2061: syntax error : identifier 'names'
const char * const * p = std::find_if(names, eNames, str_eq_to(nm));
if(p==eNames) return false;
result = p-names;
return true;
}

} //namespace ns1int main() {

const char * const names[] = {"Apple", "Orange","Plum"};
std::string str = "Plum";
int res;

ns1::getNameIndex(names, 3, str, res);
std::cout << str << " is at index " << res << std::endl;
return 0;
}

8

Решение

Это определенно ошибка компилятора. Свидетель:

extern char** a;
typedef char* cp;
char** c(a);      // error
cp* c1(a);        // no error
char** c2(c1);    // error
cp* n(0);         // no error
char** n2(0);     // error
4

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]