Word does not name a type

mkostoevr

Незнайка

26 / 11 / 2

Регистрация: 14.10.2016

Сообщений: 373

Записей в блоге: 2

1

23.06.2017, 11:11. Показов 4605. Ответов 9

Метки нет (Все метки)


Студворк — интернет-сервис помощи студентам

Здрасте!

Короче, такое дело, я решил уменьшить размер своей программы таким образом: выделить все функции, которые в ней используются и подключить только те заголовки, в которых эти функции объявлены.

Этот код:

C++
1
#include <Windows.h>

Я заменил вот этим:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
/* GetCurrentProcess()
 * TerminateProcess()
 * IsProcessorFeaturePresent()
 * SetUnhandledExceptionFilter()
 * GetCurrentProcessId()
 * QueryPerformanceCounter()
 * UnhandledExceptionFilter()
 * IsDebuggerPresent()
 * Sleep()
 * GetSystemTimeAsFileTime()
 * GetCurrentThreadId()
 * InitializeSListHead()
 * WinExec() */
#include <WinBase.h>
 
/* GetPixel() */
#include <WinGDI.h>
 
/* DeleteFileW() */
#include <FileAPI.h>
 
/* GetCursorPos()
 * SendMessageW()
 * GetWindowRect()
 * FindWindowW()
 * keybd_event()
 * LoadIconW()
 * GetDC()
 * mouse_event()
 * SetWindowPos()*/
#include <WinUser.h>
 
/* atoi()
 * printf() */
#include <STDLib.h>
 
/* GetConsoleTitleW() */
#include <WinCon.h>
 
/* WideCharToMultiByte() */
#include <StringAPISet.h>
 
/* _beginthread()
 * _endthread() */
#include <Process.h>
 
#include <URLmon.h> // URLDownloadToFile()
#include <Tchar.h>     // _T() MACROS

В результате MinGW выдал пот такой лист ошибок:

C:/TDM-GCC-64/x86_64-w64-mingw32/include/minwinbase.h:14:5: error: ‘DWORD’ does not name a type
DWORD nLength;
^
C:/TDM-GCC-64/x86_64-w64-mingw32/include/minwinbase.h:15:5: error: ‘LPVOID’ does not name a type
LPVOID lpSecurityDescriptor;
^
C:/TDM-GCC-64/x86_64-w64-mingw32/include/minwinbase.h:16:5: error: ‘WINBOOL’ does not name a type
WINBOOL bInheritHandle;
^
C:/TDM-GCC-64/x86_64-w64-mingw32/include/minwinbase.h:20:5: error: ‘ULONG_PTR’ does not name a type
ULONG_PTR Internal;
^
C:/TDM-GCC-64/x86_64-w64-mingw32/include/minwinbase.h:21:5: error: ‘ULONG_PTR’ does not name a type
ULONG_PTR InternalHigh;
^
C:/TDM-GCC-64/x86_64-w64-mingw32/include/minwinbase.h:22:5: error: ‘__C89_NAMELESS’ does not name a type
__C89_NAMELESS union {
^
C:/TDM-GCC-64/x86_64-w64-mingw32/include/minwinbase.h:28:7: error: ‘DUMMYUNIONNAME’ does not name a type
} DUMMYUNIONNAME;
^
C:/TDM-GCC-64/x86_64-w64-mingw32/include/minwinbase.h:29:5: error: ‘HANDLE’ does not name a type
HANDLE hEvent;
^
C:/TDM-GCC-64/x86_64-w64-mingw32/include/minwinbase.h:33:5: error: ‘ULONG_PTR’ does not name a type
ULONG_PTR lpCompletionKey;
^
C:/TDM-GCC-64/x86_64-w64-mingw32/include/minwinbase.h:35:5: error: ‘ULONG_PTR’ does not name a type
ULONG_PTR Internal;
^
C:/TDM-GCC-64/x86_64-w64-mingw32/include/minwinbase.h:36:5: error: ‘DWORD’ does not name a type
DWORD dwNumberOfBytesTransferred;
^
C:/TDM-GCC-64/x86_64-w64-mingw32/include/minwinbase.h:42:5: error: ‘DWORD’ does not name a type
DWORD dwLowDateTime;
^
C:/TDM-GCC-64/x86_64-w64-mingw32/include/minwinbase.h:43:5: error: ‘DWORD’ does not name a type
DWORD dwHighDateTime;
^
C:/TDM-GCC-64/x86_64-w64-mingw32/include/minwinbase.h:50:5: error: ‘WORD’ does not name a type
WORD wYear;
^
C:/TDM-GCC-64/x86_64-w64-mingw32/include/minwinbase.h:51:5: error: ‘WORD’ does not name a type
WORD wMonth;
^
C:/TDM-GCC-64/x86_64-w64-mingw32/include/minwinbase.h:52:5: error: ‘WORD’ does not name a type
WORD wDayOfWeek;
^
C:/TDM-GCC-64/x86_64-w64-mingw32/include/minwinbase.h:53:5: error: ‘WORD’ does not name a type
WORD wDay;
^
C:/TDM-GCC-64/x86_64-w64-mingw32/include/minwinbase.h:54:5: error: ‘WORD’ does not name a type
WORD wHour;
^
C:/TDM-GCC-64/x86_64-w64-mingw32/include/minwinbase.h:55:5: error: ‘WORD’ does not name a type
WORD wMinute;
^
C:/TDM-GCC-64/x86_64-w64-mingw32/include/minwinbase.h:56:5: error: ‘WORD’ does not name a type
WORD wSecond;
^
C:/TDM-GCC-64/x86_64-w64-mingw32/include/minwinbase.h:57:5: error: ‘WORD’ does not name a type
WORD wMilliseconds;
^
C:/TDM-GCC-64/x86_64-w64-mingw32/include/minwinbase.h:62:5: error: ‘DWORD’ does not name a type
DWORD dwFileAttributes;
^
C:/TDM-GCC-64/x86_64-w64-mingw32/include/minwinbase.h:66:5: error: ‘DWORD’ does not name a type
DWORD nFileSizeHigh;
^
C:/TDM-GCC-64/x86_64-w64-mingw32/include/minwinbase.h:67:5: error: ‘DWORD’ does not name a type
DWORD nFileSizeLow;
^
C:/TDM-GCC-64/x86_64-w64-mingw32/include/minwinbase.h:68:5: error: ‘DWORD’ does not name a type
DWORD dwReserved0;
^
C:/TDM-GCC-64/x86_64-w64-mingw32/include/minwinbase.h:69:5: error: ‘DWORD’ does not name a type
DWORD dwReserved1;
^
C:/TDM-GCC-64/x86_64-w64-mingw32/include/minwinbase.h:70:5: error: ‘CHAR’ does not name a type
CHAR cFileName[MAX_PATH];
^
C:/TDM-GCC-64/x86_64-w64-mingw32/include/minwinbase.h:71:5: error: ‘CHAR’ does not name a type
CHAR cAlternateFileName[14];
^
C:/TDM-GCC-64/x86_64-w64-mingw32/include/minwinbase.h:75:5: error: ‘DWORD’ does not name a type
DWORD dwFileAttributes;
^
C:/TDM-GCC-64/x86_64-w64-mingw32/include/minwinbase.h:79:5: error: ‘DWORD’ does not name a type
DWORD nFileSizeHigh;
^
C:/TDM-GCC-64/x86_64-w64-mingw32/include/minwinbase.h:80:5: error: ‘DWORD’ does not name a type
DWORD nFileSizeLow;
^
C:/TDM-GCC-64/x86_64-w64-mingw32/include/minwinbase.h:81:5: error: ‘DWORD’ does not name a type
DWORD dwReserved0;
^
C:/TDM-GCC-64/x86_64-w64-mingw32/include/minwinbase.h:82:5: error: ‘DWORD’ does not name a type
DWORD dwReserved1;
^
C:/TDM-GCC-64/x86_64-w64-mingw32/include/minwinbase.h:83:5: error: ‘WCHAR’ does not name a type
WCHAR cFileName[MAX_PATH];
^
C:/TDM-GCC-64/x86_64-w64-mingw32/include/minwinbase.h:84:5: error: ‘WCHAR’ does not name a type
WCHAR cAlternateFileName[14];
^
C:/TDM-GCC-64/x86_64-w64-mingw32/include/minwinbase.h:141:11: error: ‘RTL_CRITICAL_SECTION’ does not name a type
typedef RTL_CRITICAL_SECTION CRITICAL_SECTION;
^
C:/TDM-GCC-64/x86_64-w64-mingw32/include/minwinbase.h:142:11: error: ‘PRTL_CRITICAL_SECTION’ does not name a type
typedef PRTL_CRITICAL_SECTION PCRITICAL_SECTION;
^
C:/TDM-GCC-64/x86_64-w64-mingw32/include/minwinbase.h:143:11: error: ‘PRTL_CRITICAL_SECTION’ does not name a type
typedef PRTL_CRITICAL_SECTION LPCRITICAL_SECTION;
^
C:/TDM-GCC-64/x86_64-w64-mingw32/include/minwinbase.h:144:11: error: ‘RTL_CRITICAL_SECTION_DEBUG’ does not name a type
typedef RTL_CRITICAL_SECTION_DEBUG CRITICAL_SECTION_DEBUG;
^
C:/TDM-GCC-64/x86_64-w64-mingw32/include/minwinbase.h:145:11: error: ‘PRTL_CRITICAL_SECTION_DEBUG’ does not name a type
typedef PRTL_CRITICAL_SECTION_DEBUG PCRITICAL_SECTION_DEBUG;
^
C:/TDM-GCC-64/x86_64-w64-mingw32/include/minwinbase.h:146:11: error: ‘PRTL_CRITICAL_SECTION_DEBUG’ does not name a type
typedef PRTL_CRITICAL_SECTION_DEBUG LPCRITICAL_SECTION_DEBUG;
^
C:/TDM-GCC-64/x86_64-w64-mingw32/include/minwinbase.h:148:17: error: typedef ‘VOID’ is initialized (use decltype instead)
typedef VOID (WINAPI *LPOVERLAPPED_COMPLETION_ROUTINE) (DWORD dwErrorCode, DWORD dwNumberOfBytesTransfered, LPOVERLAPPED lpOverlapped);
^
C:/TDM-GCC-64/x86_64-w64-mingw32/include/minwinbase.h:148:17: error: ‘WINAPI’ was not declared in this scope
C:/TDM-GCC-64/x86_64-w64-mingw32/include/minwinbase.h:148:25: error: ‘LPOVERLAPPED_COMPLETION_ROUTINE’ was not declared in this scope
typedef VOID (WINAPI *LPOVERLAPPED_COMPLETION_ROUTINE) (DWORD dwErrorCode, DWORD dwNumberOfBytesTransfered, LPOVERLAPPED lpOverlapped);
^
In file included from C:/TDM-GCC-64/x86_64-w64-mingw32/include/WinBase.h:13:0,
from C:UsersWINDOWSFUCKERDocumentsProjectsProgramm ingCode BlocksCFLFmain.h:21,
from C:UsersWINDOWSFUCKERDocumentsProjectsProgramm ingCode BlocksCFLFmain.cpp:7:
C:/TDM-GCC-64/x86_64-w64-mingw32/include/minwinbase.h:154:5: error: ‘PVOID’ does not name a type
PVOID lpData;
^
C:/TDM-GCC-64/x86_64-w64-mingw32/include/minwinbase.h:155:5: error: ‘DWORD’ does not name a type
DWORD cbData;
^
C:/TDM-GCC-64/x86_64-w64-mingw32/include/minwinbase.h:156:5: error: ‘BYTE’ does not name a type
BYTE cbOverhead;
^
C:/TDM-GCC-64/x86_64-w64-mingw32/include/minwinbase.h:157:5: error: ‘BYTE’ does not name a type
BYTE iRegionIndex;
^
C:/TDM-GCC-64/x86_64-w64-mingw32/include/minwinbase.h:158:5: error: ‘WORD’ does not name a type
WORD wFlags;
^
C:/TDM-GCC-64/x86_64-w64-mingw32/include/minwinbase.h:159:5: error: ‘__C89_NAMELESS’ does not name a type

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

Это можно как-нибудь исправить? Просто программа для своей функциональности уж слишком много весит, не хотелось бы всю коллекцию заголовков <Windows.h> в неё включать.

Заранее спасибо!



0



Ушел с форума

Эксперт С++

16458 / 7422 / 1186

Регистрация: 02.05.2013

Сообщений: 11,617

Записей в блоге: 1

23.06.2017, 11:18

2

Лучший ответ Сообщение было отмечено mkostoevr как решение

Решение

Цитата
Сообщение от mkostoevr
Посмотреть сообщение

я решил уменьшить размер своей программы таким образом: выделить все функции, которые в ней используются и подключить только те заголовки, в которых эти функции объявлены.

Включение заголовка <Windows.h> на размер программы не влияет. Никак.
Там же только объявления.



1



Незнайка

26 / 11 / 2

Регистрация: 14.10.2016

Сообщений: 373

Записей в блоге: 2

23.06.2017, 11:20

 [ТС]

3

Убежденный, но Windows.h ссылается на другие заголовки, а, как мне сказали, заголовочные файлы компилятся вместе с программой в любом случае, даже если функции из них не были использованы. Разве не так?



0



Ушел с форума

Эксперт С++

16458 / 7422 / 1186

Регистрация: 02.05.2013

Сообщений: 11,617

Записей в блоге: 1

23.06.2017, 11:23

4

Объявления типов, функций, интерфейсов и т.п. сами по себе ни во что не компилятся, пока
ты их не начинаешь использовать. Они не приводят к генерации какого-либо кода или данных.

Ну и во-вторых, подключая содержимое Windows.h избирательно, в обход стандартных путей,
есть риск наступить на очень тонкие грабли, связанные с выравниванием, с объявлением
типов и структур, с разницей между версиями Windows и т.д.



0



Незнайка

26 / 11 / 2

Регистрация: 14.10.2016

Сообщений: 373

Записей в блоге: 2

23.06.2017, 11:27

 [ТС]

5

Убежденный, понятно… Но теперь двойне странно, почему программа на MinGW весит в 4 раза больше аналогичной на Visual Studio…



0



Software Developer

315 / 229 / 113

Регистрация: 03.05.2017

Сообщений: 1,322

23.06.2017, 11:30

6

mkostoevr, попробуйте использовать strip.exe входящую в состав MinGW



0



Незнайка

26 / 11 / 2

Регистрация: 14.10.2016

Сообщений: 373

Записей в блоге: 2

23.06.2017, 11:33

 [ТС]

7

decrement, программа с самого начла компилится с параметром -s, так что никаких символов в ней нет изначально, strip, скорее всего, не поможет.



0



Ушел с форума

Эксперт С++

16458 / 7422 / 1186

Регистрация: 02.05.2013

Сообщений: 11,617

Записей в блоге: 1

23.06.2017, 11:50

8

Цитата
Сообщение от mkostoevr
Посмотреть сообщение

Но теперь двойне странно, почему программа на MinGW весит в 4 раза больше аналогичной на Visual Studio…

Не вижу ничего странного.
Как минимум, это разные компиляторы с разными настройками, которые генерируют
разный код. Ну и еще у них разные реализации STL и стандартной библиотеки.
И разный «рантайм». Все это и приводит к таким различиям.

Вот было бы действительно странно, если бы MinGW или MS C/C++ Compiler
добавлял какой-нибудь код или данные в результате простого подключения
заголовка с объявлениями функций и структур…



1



183 / 181 / 66

Регистрация: 15.02.2015

Сообщений: 515

23.06.2017, 14:54

9

Цитата
Сообщение от mkostoevr
Посмотреть сообщение

почему программа на MinGW весит в 4 раза больше аналогичной на Visual Studio…

Хоть компиляторы и разные, а такая разница в размере скорее всего из-за того, что по умолчанию MSVC++ компилирует с флагом /md (Multithreded Dll), и программа динамически линкуется с рантайм библиотекой. Exe’шник становится легче, но, как я упомянул, есть зависимость от библиотеки Visual Studio конкретной версии.



0



Незнайка

26 / 11 / 2

Регистрация: 14.10.2016

Сообщений: 373

Записей в блоге: 2

23.06.2017, 15:25

 [ТС]

10

Operok, в том то и прикол, что эту функцию я отключил в настройках проекта.



0



I was trying to compile a software package, While compiling I am getting this error

sha.cpp:29: error: ‘word64’ does not name a type

I went through the source code.The relevant portion is

#if HAVE64
    word64 bytes;
#else
    word32 bytesHi, bytesLo;
#endif

from sha.cpp, Line No 29-33

And I found that word64 was declared in the following way in another file

#include <limits.h>

#ifdef __cplusplus
extern "C" {
#endif

#if UCHAR_MAX == 0xff
typedef unsigned char byte;
typedef signed char int8;
#else
#error This machine has no 8-bit type
#endif

#if UINT_MAX == 0xffff
typedef uint word16;
typedef int int16;
#elif USHRT_MAX == 0xffff
typedef unsigned short word16;
typedef short int16;
#else
#error This machine has no 16-bit type
#endif

#if UINT_MAX == 0xfffffffful
typedef uint word32;
typedef int int32;
#elif ULONG_MAX == 0xfffffffful
typedef ulong word32;
typedef long int32;
#else
#error This machine has no 32-bit type
#endif

#if ULONG_MAX > 0xfffffffful
#if ULONG_MAX == 0xfffffffffffffffful
typedef ulong bnword64;
#define BNWORD64 bnword64
#define HAVE64 1
#endif
#endif



#ifndef HAVE64
#if defined(ULONG_LONG_MAX) || defined (ULLONG_MAX) || defined(ULONGLONG_MAX)
typedef unsigned long long word64;
typedef long long int64;
#define HAVE64 1
#endif
#endif

And my system is

Linux EmbeddedLinux 2.6.32-431.1.2.el6.x86_64 #1 SMP Sun Nov 24 09:37:37 EST 2013 x86_64 x86_64 x86_64 GNU/Linux

The compiler I am using to compile

g++ (GCC) 4.4.7 20120313 (Red Hat 4.4.7-4)

I browsed internet to get this thing fixed, but did not find any clue.
Any help will be appreciated

In C++, one of the most common errors that programmers encounter is the “does not name a type” error. The error usually occurs when the programmer writes a piece of code in which the compiler is not able to recognize the type or definition for it.

In this article, we are going to explore the “does not name a type” error in C++ in detail, including the causes of the error, and some coded examples which can trigger the error along with its solutions.

Causes of the Error

The root causes of this error are the syntactical mistakes that happen due to the use of incorrect syntax. This error can occur when the programmer uses an undefined class member, undeclared class pointer, and incorrectly defined variables. Here are some reasons in detail as to why this error can occur:

  1. C++ uses header files to define classes, structs, and different data types. You can encounter the error if you do not include header files while writing the program. The compiler will not recognize the associated types and generate the “does not name a type” error.
  2. Syntax errors in your code can easily generate this error as the compiler will misinterpret the intended type names. Let’s have a detailed look at some of the reasons which can trigger this error.

Some of the more common causes of the given error are as follows:

1. Using a datatype that has not been defined yet

A class or struct must be defined before it is used in C++. If the user tries to use the undefined data type “Day” to declare the data member, then the compiler will generate the stated error.

C++

#include <iostream>

using namespace std;

class MyClass {

public:

    Day Morning;

};

Output

/tmp/PIU8LcSCJx.cpp:8:5: error: 'Day' does not name a type
    8 |     Day Morning;
      |     ^~~

In the above code, the compiler will generate the error because we have used the “Day” class which is not defined.

2. Circular dependencies between classes

When the definitions of 2 classes depend on each other and one of them is not defined then it can lead to circular dependency between them which can generate the “does not name a type error”. A coded example of the error would be:

C++

#include <iostream>

using namespace std;

class ClassA {

public:

    ClassB obj;

};

class ClassB {

public:

    ClassA obj;

};

int main() {

    return 0;

}

Output

/tmp/PIU8LcSCJx.cpp:6:5: error: 'ClassB' does not name a type; did you mean 'ClassA'?
   6 |     ClassB obj;
     |     ^~~~~~
     |     ClassA

In the above code, ClassB depends on ClassA which is not defined completely, and thus, the compiler will produce an error of “does not name a type” for you.

3. Wrong initialization of variables 

A variable declaration should be done inside a function or else you are sure to get an error. For example, we create a struct and then declare two variables inside them and do not initialize them. Later in the code, we initialize the same variables outside the function body. The compiler will generate a “variable does not name a type error”. Let’s look at the code to understand what we are trying to say.

C++

#include <iostream>

using namespace std;

struct games{

    int Football;

    int Cricket;

    int VolleyBall;

};

games activeGames;

activeGames.Football=5;

activeGames.Cricket=11;

activeGames.VolleyBall=6;

int main() {

    return 0;

}

Output

/tmp/PIU8LcSCJx.cpp:11:1: error: 'activeGames' does not name a type
   11 | activeGames.Football=5;
      | ^~~~~~~~~~~
/tmp/PIU8LcSCJx.cpp:12:1: error: 'activeGames' does not name a type
   12 | activeGames.Cricket=11;
      | ^~~~~~~~~~~
/tmp/PIU8LcSCJx.cpp:13:1: error: 'activeGames' does not name a type
   13 | activeGames.VolleyBall=6;
      | ^~~~~~~~~~~

4. Not following the Syntax

Overall, all the causes are cases when there is a mistake in the syntax of the program. Writing incorrect syntaxes like misplacing semicolons, curly brackets, and function calls before the main() function. The user can also face this error if he does not have a basic understanding of the difference between various operators and uses incorrect datatypes.

The C++ error can be solved if the user is careful with the class definitions, define the variables properly, and adhere to the syntax of the language. Let’s look at the detailed solutions for this particular type of error.

Solutions of the “does not name a type” Error in C

We should take care of the following points to avoid the “does not name a type error” in C.

1. Defining the Datatype before using it

As we have seen, if you do not define a class or a struct and then later try to use it, the compiler will throw the “does not name a type error”. It is better to define the datatype you are using in the program.

2. Removing Circular Dependency between Classes

In the circular dependency case, we should use the forward declaration of the classes. This will help in avoiding the error by telling the compiler that the class with the given name has its definition present somewhere in the program.

3. Defining Variables while declaring Them

You should define the variables while declaring them as it is considered a good coding practice and prevents these types of errors. Let’s look at the correct code to solve this issue.

4. Following the Syntax Correctly

It is the ultimate solution to the problem which removes the root of this error. The user should double-check the syntax and ensure the following points while checking their code:

  • All the statements end with a semicolon.
  • Ensure that all the code stays within the curly braces.
  • Removing function calls before the main() function.
  • Specifying correct datatypes for the variables.

Conclusion

The “does not name a type” error in C++ usually pops up when the compiler is unable to understand your program. The problem could be a variable or a function and can be caused by a variety of factors, such as missing header files, typos in writing variables, or circular dependencies between classes. It is very important to carefully review the code and check for any missing include statements. The error can be solved by understanding the root causes of the “does not name a type” error.

If you are a C++ developer, you might have come across the error ‘Does not name a type’ at some point in your programming journey. This error can be frustrating and can make your code fail to compile. In this guide, we will look at the causes of this error and provide you with tips and solutions to resolve it.

What Causes the Error ‘Does Not Name a Type’?

The error ‘Does not name a type’ occurs when the compiler encounters an unknown type. This can happen if you have not declared a class or a struct, or if you have misspelled the name of the type. The error can also occur if you have not included the necessary header files or if the header files are not in the correct location.

Tips to Resolve the Error ‘Does Not Name a Type’

Here are some tips that can help you resolve the error ‘Does not name a type’:

Check for Typing Errors: One of the most common causes of this error is a typing mistake. Double-check the spelling of the type you are trying to use in your code.

Declare the Type: If you have not declared the type, declare it using the ‘class’ or ‘struct’ keyword. For example, if you are trying to use a class called ‘Person’, you can declare it as follows:

class Person {
    // Class definition here
};

Include the Header File: If you have declared the type in a header file, make sure you include the header file in your code. For example, if your header file is called ‘person.h’, you can include it as follows:

#include "person.h"

Check the Header File Location: Make sure the header file is in the correct location. If the header file is in a different directory than your code file, you may need to specify the path to the header file.

Use Forward Declarations: If you don’t want to include the entire header file, you can use forward declarations. A forward declaration tells the compiler that a class or struct exists without providing the full definition. For example, if you have a class called ‘Person’ and you want to use it in another class called ‘Employee’, you can forward declare it as follows:

class Person;

class Employee {
    // Class definition here
};

FAQ

What is the Error ‘Does Not Name a Type’?

The error ‘Does not name a type’ occurs when the compiler encounters an unknown type.

What Causes the Error ‘Does Not Name a Type’?

The error can be caused by a typing mistake, a missing declaration, a missing header file, or a header file in the wrong location.

How Can I Resolve the Error ‘Does Not Name a Type’?

You can resolve the error by checking for typing errors, declaring the type, including the header file, checking the header file location, or using forward declarations.

What is a Forward Declaration?

A forward declaration tells the compiler that a class or struct exists without providing the full definition.

Yes, you can use forward declarations instead of including header files if you don’t want to include the entire header file.

Conclusion

The error ‘Does not name a type’ can be frustrating, but it is easily resolvable. By following the tips provided in this guide, you can quickly identify the cause of the error and resolve it. Remember to double-check for typing errors, declare the type, include the header file, check the header file location, or use forward declarations. Happy coding!

  • C++ Programming Language
  • Stack Overflow

Здравствуйте. Первый раз сталкиваюсь с ардуино. Остановился на такой же ошибке:
‘LEDdata’ does not name a type; did you mean ‘mData’?
Всё, что выше писали делаю, ошибка не уходит.
Точнее, микролед версия 3.4, а версии 2.3 нет на гитхабе

/*
Скетч к проекту «Наливатор by AlexGyver»
— Страница проекта (схемы, описания): https://alexgyver.ru/GyverDrink/
— Исходники на GitHub: https://github.com/AlexGyver/GyverDrink/
Проблемы с загрузкой? Читай гайд для новичков: https://alexgyver.ru/arduino-first/
Нравится, как написан код? Поддержи автора! https://alexgyver.ru/support_alex/
Автор: AlexGyver, AlexGyver Technologies, 2019
https://www.youtube.com/c/alexgyvershow
https://github.com/AlexGyver
https://AlexGyver.ru/
[email protected]
*/

/*
Версия 1.1:
— Поправлена работа системы при выборе некорректного объёма
— Исправлены ошибки при наливании больших объёмов
— Исправлен баг с остановкой наливания при убирании другой рюмки

Версия 1.2:
— Исправлено ограничение выбора объёма
— Исправлены ошибки (обновите библиотеки из архива! servoSmooth v1.8, microLED v2.3)
— Добавлено хранение в памяти выбранного объёма

Версия 1.3:
— Исправлен баг со снятием рюмки в авто режиме (жука поймал Юрий Соколов)

Версия 1.4:
— Добавлена настройка уровня концевиков (для ИК датчиков)
— Исправлена ошибка с наливанием больших объёмов

Версия 1.5:
— Добавлена инверсия сервопривода (ОБНОВИТЕ БИБЛИОТЕКУ ИЗ АРХИВА)
*/

// ======== НАСТРОЙКИ ========
#define NUM_SHOTS 4 // количество рюмок (оно же кол-во светодиодов и кнопок!)
#define TIMEOUT_OFF 5 // таймаут на выключение (перестаёт дёргать привод), минут
#define SWITCH_LEVEL 0 // кнопки 1 — высокий сигнал при замыкании, 0 — низкий
#define INVERSE_SERVO 0 // инвертировать направление вращения серво

// положение серво над центрами рюмок
const byte shotPos[] = {25, 60, 95, 145, 60, 60};

// время заполнения 50 мл
const long time50ml = 5500;

#define KEEP_POWER 1 // 1 — система поддержания питания ПБ, чтобы он не спал

// отладка
#define DEBUG_UART 1

// =========== ПИНЫ ===========
#define PUMP_POWER 3
#define SERVO_POWER 4
#define SERVO_PIN 5
#define LED_PIN 6
#define BTN_PIN 7
#define ENC_SW 8
#define ENC_DT 9
#define ENC_CLK 10
#define DISP_DIO 11
#define DISP_CLK 12
const byte SW_pins[] = {A0, A1, A2, A3, A4, A5};

// =========== ЛИБЫ ===========
#include <GyverTM1637.h>
#include <ServoSmooth.h>
#include <microLED.h>
#include <EEPROM.h>
#include «encUniversalMinim.h»
#include «buttonMinim.h»
#include «timer2Minim.h»

// =========== ДАТА ===========
#define COLOR_DEBTH 2 // цветовая глубина: 1, 2, 3 (в байтах)
LEDdata leds[NUM_SHOTS]; // буфер ленты типа LEDdata (размер зависит от COLOR_DEBTH)
microLED strip(leds, NUM_SHOTS, LED_PIN); // объект лента

GyverTM1637 disp(DISP_CLK, DISP_DIO);

// пин clk, пин dt, пин sw, направление (0/1), тип (0/1)
encMinim enc(ENC_CLK, ENC_DT, ENC_SW, 1, 1);

ServoSmooth servo;

buttonMinim btn(BTN_PIN);
buttonMinim encBtn(ENC_SW);
timerMinim LEDtimer(100);
timerMinim FLOWdebounce(20);
timerMinim FLOWtimer(2000);
timerMinim WAITtimer(400);
timerMinim TIMEOUTtimer(15000); // таймаут дёргания приводом
timerMinim POWEROFFtimer(TIMEOUT_OFF * 60000L);

bool LEDchanged = false;
bool pumping = false;
int8_t curPumping = -1;

enum {NO_GLASS, EMPTY, IN_PROCESS, READY} shotStates[NUM_SHOTS];
enum {SEARCH, MOVING, WAIT, PUMPING} systemState;
bool workMode = false; // 0 manual, 1 auto
int thisVolume = 50;
bool systemON = false;
bool timeoutState = false;
bool volumeChanged = false;
bool parking = false;

// =========== МАКРО ===========
#define servoON() digitalWrite(SERVO_POWER, 1)
#define servoOFF() digitalWrite(SERVO_POWER, 0)
#define pumpON() digitalWrite(PUMP_POWER, 1)
#define pumpOFF() digitalWrite(PUMP_POWER, 0)

#if (DEBUG_UART == 1)
#define DEBUG(x) Serial.println(x)
#else
#define DEBUG(x)
#endif

Понравилась статья? Поделить с друзьями:
  • Word does not create a new
  • Word does not copy tables
  • Word does not close
  • Word does not check grammar
  • Word docx скачать бесплатно для андроид на русском