Using typedef name fpos t after struct

Я не могу понять, какова реальная проблема с этим.

Получаю это странное сообщение об ошибке actor.cpp:31: error: using typedef-name ‘Actor’ after ‘class’ .

Любая идея, что я сделал здесь неправильно? Спасибо:)

Вам не разрешается определять символ Actor более одного раза. Оператор typedef уже определяет символ Actor как псевдоним для struct _actor , прежде чем пытаться объявить класс с тем же именем.

Я предполагаю, что вы используете компилятор gcc . При компиляции с gcc я получаю следующие ошибки:

Первое сообщение (указывающее на строку class Actor в программе) указывает, что вы не можете объявить класс с typedef-name ( Actor уже объявлен с помощью typedef ). Второе сообщение (указывающее на строку typedef struct _actor в программе) немного яснее и относится к нескольким объявлениям для Actor .

Очень часто в C/С++ для одного класса ошибок, подобных этому, приводят к многочисленным ошибкам компилятора, и часто более полезное сообщение не является первым сообщенным.

Чтобы понять, что происходит, нам нужно разбить первый оператор на части:

Сначала мы создаем структуру с именем _actor . Затем мы создаем typedef для struct _actor , называемый _actor . Это полезно только в C. Это позволяет нам сказать:

Но в С++ это не нужно, поскольку С++ позволяет нам использовать первую форму изначально, без typedef.

Третья строка создает второй typedef для struct _actor , называемый Actor . Когда вы пытаетесь создать класс с именем Actor , компилятор жалуется, так как это имя уже используется для псевдонима для структуры.

Теперь представляется вероятным, что в исходном C-коде автор предполагал struct _actor быть просто деталью реализации, и что вы всегда будете использовать только Actor для ссылки на экземпляры этой структуры. Поэтому в вашем коде на С++ вы, вероятно, должны полностью исключить typedefs и просто переименовать структуру. Однако это даст вам:

Читайте также:  Как в ворде вставить формулу суммы

Итак, предположим, вы должны изучить слияние этих двух классов.

Всем привет, в продолжении Вот этого , простимулировала еще Эта тема.

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

К сожалению не смогу сказать в чем именно была проблема, вчера просто кучу всего с ним переделал в основном на программном уровне, к механике почти не лез.

попробовал печатать с флешки

еще раз внимательно и с инструкции проверил все настройки

т.к. устал от кучи испорченный деталей черного цвета, сменил пластик на красный

И ведь что-то помогло,

Эта тварЮшка напечатала мне детальку нормального качества (ну для меня конечно нормальное качество)

Печатал два кубика, один из них дном вверх на поддержках

Сопло 235 — 230 (после 3 слоя)

Стол 110-100 (после 4 слоя)

без каймы, рафта, брима, в общем без всего, просто деталька на столике с поддержкой одного кубика

Из основных настроек:

Диаметр прутка 1.74

ХЗ как, но вроде все получилось (надо конечно еще покопать и найти в чем именно была проблема)

На радостях решил посмотреть в прошивку и подкорректировать PIDы,

Открыл Ардуино программу,

нашел на флешке прошивку моего принтера. открыл ее, поздоровался и познакомился с открытыми окошками (всё-таки первый раз в жизни друг друга видим)

на часок наверно

пытаясь в этой мешанине символов найти что-то знакомое

Не знаю сколько я его мучал (общее время вчерашнего, интимного, свидания с принтером с 20-00 до 3-30, счас с 8 на работе, главное не моргать)

Читайте также:  Outlook для android как настроить

но в итоге нашел где в прошивке надо поставить оттестированные значения PID, установил, нажимаю скомпелировать, ИИИИ фигушки. Ругается на какую-то ошибку

using typedef-name ‘fpos_t’ after ‘struct’

Почитал форум, нашел Вот эту тему где описано как это лечить, заменил два файла

SdBaseFile.cpp и SdBaseFile.h

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

ИИИ УРА, оно не сломалась (на тот момент так думал). без проблем распечатал очередной кубик ( надо уже себе новую тестовую модельку найти, кубики уже скоро снится будут)

В общем проверил еще пару настроек, и решил наконец попробовать длинную печать с флешки (раньше всегда печатал с компа, с флешки лишь пробовал как оно вообще печатает)

Скинул модель, установил флешку в принтер. выбрал на флешке нужный файл, и все — дальше ничего не происходить, все-таки что-то сломал в прошивке, флешку видит нормально, но печать с нее не стартует.

И заметил что при перезагрузке принтера, на экране начала появляется надпись Test на пару секунд.
Подробнее…

I can’t figure out what the actual problem is with this.

I get this weird error message actor.cpp:31: error: using typedef-name ‘Actor’ after ‘class’ .

Any idea what I did wrong here? Thank you 🙂

3 Answers 3

You are not allowed to define the symbol Actor more than once. The typedef statement already defines the symbol Actor as an alias for struct _actor before you attempt to declare a class with the same name.

I’m guessing you’re using the gcc compiler. I get the following errors when I compile with gcc :

The first message (pointing the class Actor line in the program) states that you cannot declare a class with a typedef-name ( Actor is already declared using typedef ). The second message (pointing to the typedef struct _actor line in the program) is a little clearer and refers to the multiple declarations for Actor .

Читайте также:  Что называется шириной интерференционной полосы

It is very common in C/C++ for a single class of error like this to result in multiple compiler errors and often the more helpful message is not the first reported.

To understand what going on, we need to break the first statement up into it’s parts:

First we create a structure called _actor . Next, we create a typedef for struct _actor called _actor . This is only useful in C. It allows us to say:

But in C++, it’s unnecessary, as C++ allows us to use the first form natively, without the typedef.

The third line creates a second typedef for struct _actor called Actor . When you then try to create a class named Actor the compiler complains, as that name is already being used for the alias for the struct.

Now, it seems likely that in the original C code, the author had intended struct _actor to be merely an implementation detail, and that you would always use just Actor to refer to instances of this struct. Therefore, in your C++ code, you should probably eliminate the typedefs entirely, and just rename the struct. However, that will give you:

So, prehaps you should look into merging those two classes.