2009-04-06 3 views
3

Я получаю сообщение об ошибке в Visual C++, что дает мне очень трудное время.Ошибка Visual C++ C2143: синтаксическая ошибка: отсутствует ')' перед 'константой'

Ошибка чтения Ошибка c2143: синтаксическая ошибка: отсутствует «)» перед «константа»

Мой код заключается в следующем:

coefficient[i] = (1 - (2 * depth)) + ((t - floor(t + 0.5) + 1) 2 * depth); 

Я #include в начале файла, который должен определить функцию пола (двойной).

немного больше объяснений переменных.

double depth - это переменная-член класса, в которой эта строка находится.
int i - значение индекса.
double t является добавочным значением.

То, что они делают, действительно несущественно, но я хотел уточнить, что все три уже определены как переменные основных типов.

Я прошел проверку и подтвердил, что все круглые скобки совпадают. Я не понимаю, что такое «постоянный», на который ссылается компилятор. Есть идеи?

ответ

6

Я не совсем уверен, что это та же ошибка, что компилятор дает вам, но вы должны поставить знак «*» перед второй «2», так что это:

coefficient[i] = (1 - (2 * depth)) + ((t - floor(t + 0.5) + 1) 2 * depth); 

становится этим:

coefficient[i] = (1 - (2 * depth)) + ((t - floor(t + 0.5) + 1) * 2 * depth); 
+0

Ах, глупый меня. Может быть трудно увидеть простые ошибки без второй пары глаз. Благодарю. – Rich

5
coefficient[i] = (1 - (2 * depth)) + ((t - floor(t + 0.5) + 1) (the problem is here) 2 * depth); 
1

коэффициент [I] = (1 - (2 * глубина)) + ((т - пол (т + 0,5) + 1) 2 (Что такое 2 делает здесь?) * глубина);

6

Другие плакаты показали вам фактическую ошибку в инструкции, но, пожалуйста, разделите это на несколько подзапросов, которые более четко показывают, что вы пытаетесь сделать математически, потому что эта функция вызовет у вас головные боли в будущее, если вы этого не сделаете!

+0

в качестве альтернативы они могли бы просто упростить выражение, предполагая, что недостающий оператор должен быть двумя, тогда это хороший старт. 1 + (t-floor (t + 0,5)) * 2 * depth –

+0

Это (т-этаж (t + 0,5)) выглядит как суб-выражение, которое нуждается в некотором объяснении для меня. –

2

Несмотря на то, что у вас есть правильный ответ, я объясню, как вы должны были прийти к нему.

Когда вы сталкиваетесь с ошибкой в ​​длинном выражении, которое вы не можете найти, произнесите выражение отдельно, по частям, пока не найдете его.

В этом случае:

coefficient[i] = (1 - (2 * depth)) + ((t - floor(t + 0.5) + 1) 2 * depth); 

становится:

firsthalf = (1 - (2 * depth)); 
secondhalf = ((t - floor(t + 0.5) + 1) 2 * depth); // Error appears on this line 
coefficient[i] = firsthalf + secondhalf; 

Это исключает первую часть в качестве источника ошибки.

Следующая попытка:

exprA = (t - floor(t + 0.5) + 1); 
exprB = exprA * 2; 
exprC = exprB * depth; // Hmm.... this all worked. Start putting it back together. 
secondhalf = exprC; 

Заключительная попытка:

exprA = ((MY_TEST_CONSTANT) 2 * depth); // Error now becomes obvious. 
1

Я сталкивался с подобной ошибки при объявлении перечисления. Это связано с тем, что одна из констант перечисления также была объявлена ​​в другом месте кода.

Смежные вопросы