i have a problem with following code:
Generator.h:
#pragma once
class Generator
{
public:
friend class BagObject;
Generator(void);
~Generator(void);
...
void generator(int);
private:
BagObject *object;
vector<BagObject> data; //Error c4430
};
and this is a error:
error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
there is 6 more errors but i believe that they should disappeared after solving this problem.
this is the cpp file. I couldn’t paste it on the first time.
Generator.cpp
#include "stdafx.h"
#include "Generator.h"
#include "BagObject.h"
#include <iostream>
#include <vector>
#include <ctime>
using namespace std;
Generator::Generator(void)
{
srand(time(NULL));
}
Generator::~Generator(void)
{
data.clear();
}
void Generator::generator(int ld)
{
for (int i = 0; i<ld; i++)
{
object = new BagObject(rand(),rand(),i);
data.push_back(object);
}
}
int main()
{
Generator *g = new Generator;
g->generator(10);
return 0;
}
asked Nov 14, 2016 at 17:51
1
Either you forgot to include header
#include <vector>
or forgot to write directive
using namespace std;
In any case it would be better to write
#include <vector>
//...
std::vector<BagObject> data;
^^^^^
You have to include the header <vector>
in all headers where there is a reference to std::vector
.
answered Nov 14, 2016 at 17:54
Vlad from MoscowVlad from Moscow
287k23 gold badges179 silver badges323 bronze badges
15
Other answers are correct, but cryptic. In plain English, your header does not know about BagObject
class. You included BagObject.h
in the .cpp
, but you should have included it in the .h
.
It also does not know about vector
for the same reason.
I am guessing, you were under impression that .cpp
had to use #include
, but .h
did not. This is a common misunderstanding of beginners in C++. Headers need to include all referenced class declarations, hence you need to elevate your includes from .cpp
into your .h
.
Move two mentioned includes into the header and it will work.
answered Mar 28, 2018 at 14:51
ajehajeh
2,6002 gold badges31 silver badges61 bronze badges
1
vector
may not be instantiated with an incomplete type. In order to have vector<BagObject> data;
in the header, the header must also have #include "BagObject.h"
.
(This is in addition to the changes recommended in Vlad’s answer)
answered Nov 14, 2016 at 20:33
M.MM.M
137k21 gold badges201 silver badges349 bronze badges
I know your problem is solved but in My case the same error was caused due to cyclic includes (i.e. I had accidentally included the .h file in one of the .h file included in it)
TextureManager.h (The file with the error)
// This is TextureManager.h
#pragma once
#include "Game.h"
#include "GameObject.h"
/*
texture manager class
*/
GameObject.h
// This is GameObject.h
#pragma once
#include "game.h"
#include "TexutureManager.h" // Accidental
/*
*/
I thought it may be worth noting this is also one of the ways to get this error.
answered Jul 27, 2022 at 6:35
- Remove From My Forums
-
Question
-
HI
I have been using a third party provided header file in my .NETClass Library project (VS2008). It is generating a lot of errors of some thing like that
« C4430: missing type specifier — int assumed. Note: C++ does not support default-int«
Some of the code is:
#ifndef __TESTSDK_H__ #define __TESTSDK_H__ #ifdef TESTSDK_EXPORTS #define SDKAPI __declspec( dllexport ) #else #define SDKAPI __declspec( dllimport ) #endif #ifdef __cplusplus extern "C" { #endif /* def __cplusplus */ typedef struct _STATUSVERSION { //Status information version WORD MajorVersion ; //Major version WORD MinerVersion ; //miner version }STATUSVERSION, *LPSTATUSVERSION ; #ifdef __cplusplus } #endif /* def __cplusplus */ #endif /* __TESTSDK_H__ */
and It generates the following Errors
Error 2 error C2146: syntax error : missing ';' before identifier 'MajorVersion' Error 3 error C4430: missing type specifier - int assumed. Note: C++ does not support default-int Error 4 error C4430: missing type specifier - int assumed. Note: C++ does not support default-int Error 5 error C2146: syntax error : missing ';' before identifier 'MinerVersion' Error 6 error C4430: missing type specifier - int assumed. Note: C++ does not support default-int Error 7 error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
What causing these Errors ??
Answers
-
scarus wrote:
and It generates the following Errors
Error 2 error C2146: syntax error : missing ‘;’ before identifier ‘MajorVersion’
Looks like you are expected to #include <windows.h> before you include this header.
Igor Tandetnik
-
Marked as answer by
Thursday, September 16, 2010 12:50 PM
-
Marked as answer by
m0 2 / 2 / 1 Регистрация: 03.12.2013 Сообщений: 146 |
||||||||
1 |
||||||||
04.08.2014, 17:43. Показов 14879. Ответов 17 Метки нет (Все метки)
Вот так простенький код
Ругается на переменную B b; Как тогда объявить переменную типа В?
__________________
0 |
102 / 75 / 17 Регистрация: 23.07.2014 Сообщений: 877 Записей в блоге: 1 |
|
04.08.2014, 17:47 |
2 |
m0, вы хотите циклическое включение заголовочных файлов устроить? Не выйдет.
0 |
2 / 2 / 1 Регистрация: 03.12.2013 Сообщений: 146 |
|
04.08.2014, 18:09 [ТС] |
3 |
Окей, что мне делать?
0 |
ValeryS Модератор 8759 / 6549 / 887 Регистрация: 14.02.2011 Сообщений: 22,972 |
||||
04.08.2014, 18:19 |
4 |
|||
Окей, что мне делать? Выбросить одно включение и объявить класс
0 |
102 / 75 / 17 Регистрация: 23.07.2014 Сообщений: 877 Записей в блоге: 1 |
|
04.08.2014, 18:25 |
5 |
m0, или вообще убрать #include «A.h». Разве классу B класс A нужен? Если они используют что-то общее (typedef’ы, например), вынесите это общее в отдельный хэдер.
0 |
m0 2 / 2 / 1 Регистрация: 03.12.2013 Сообщений: 146 |
||||||||
04.08.2014, 18:41 [ТС] |
6 |
|||||||
CyberSolver, Да нужен, я просто привел простой пример. Мне нужно чтобы у каждого класса была переменная с типом другого.
Error 2 error C4430: missing type specifier — int assumed. Note: C++ does not support default-int
0 |
102 / 75 / 17 Регистрация: 23.07.2014 Сообщений: 877 Записей в блоге: 1 |
|
04.08.2014, 18:43 |
7 |
m0, тогда не парьтесь и объявите их в одном месте.
0 |
2 / 2 / 1 Регистрация: 03.12.2013 Сообщений: 146 |
|
04.08.2014, 20:09 [ТС] |
8 |
CyberSolver, Ну это я здесь два простеньких класса привел, на самом деле у меня два больших класса, и мне нужна такая переменная в каждом из них.
0 |
CyberSolver 102 / 75 / 17 Регистрация: 23.07.2014 Сообщений: 877 Записей в блоге: 1 |
||||
04.08.2014, 20:18 |
9 |
|||
m0, ну если они содержат по указателю друг на друга, и вы непременно хотите разделения — на напишите что-ли отдельный заголовочник
и включите в оба. Если не указатели, а сами — придется пихать в один.
1 |
2 / 2 / 1 Регистрация: 03.12.2013 Сообщений: 146 |
|
04.08.2014, 20:20 [ТС] |
10 |
CyberSolver, Про отдельный заголовочный файл не понял
0 |
CyberSolver 102 / 75 / 17 Регистрация: 23.07.2014 Сообщений: 877 Записей в блоге: 1 |
||||
04.08.2014, 20:24 |
11 |
|||
Если они используют что-то общее (typedef’ы, например), вынесите это общее в отдельный хэдер. m0, я про это. Пусть в отдельном хэдере просто будет
раз пошла такая пьянка. Я же не знаю вашей задачи, так что могу советовать только общее: брось каку и так далее.
0 |
2 / 2 / 1 Регистрация: 03.12.2013 Сообщений: 146 |
|
04.08.2014, 20:27 [ТС] |
12 |
Фак, есть какая-то книга где в качестве примера проектируется реальное приложение? желательно через тестирование. А то учебные примеры слишком унылы.
0 |
327 / 230 / 55 Регистрация: 30.05.2014 Сообщений: 682 |
|
04.08.2014, 20:33 |
13 |
1 |
ValeryS Модератор 8759 / 6549 / 887 Регистрация: 14.02.2011 Сообщений: 22,972 |
||||
04.08.2014, 20:39 |
14 |
|||
Если не указатели, а сами — придется пихать в один только указатели иначе не скомпилится
каков размер объектов данных классов?
0 |
2 / 2 / 1 Регистрация: 03.12.2013 Сообщений: 146 |
|
04.08.2014, 20:41 [ТС] |
15 |
ValeryS, да большой, поле класса будет содержать массив координат вершин. А их до миллиона может быть и в каждой x, y, z -int;
0 |
ValeryS Модератор 8759 / 6549 / 887 Регистрация: 14.02.2011 Сообщений: 22,972 |
||||
04.08.2014, 20:49 |
16 |
|||
ValeryS, да большой, я не про большой
компилятор ничего не знает про класс B, кроме того что он будет где то описан
1 |
2 / 2 / 1 Регистрация: 03.12.2013 Сообщений: 146 |
|
04.08.2014, 20:50 [ТС] |
17 |
ValeryS, Так и сделаю, по другому видимо никак.
0 |
Модератор 8759 / 6549 / 887 Регистрация: 14.02.2011 Сообщений: 22,972 |
|
04.08.2014, 20:51 |
18 |
содержать массив координат вершин. А их до миллиона может быть и в каждой x, y, z -int; итого 12 мегабайт, на стеке такое не выделишь, только в куче
0 |
See more:
Have this error from main() Need help!
#include "stdafx.h" #include <pcap.h> typedef struct ip_address{ u_char byte1; u_char byte2; u_char byte3; u_char byte4; }ip_address; typedef struct ip_header{ u_char ver_ihl; u_char tos; u_short tlen; u_short identification; u_short flags_fo; u_char ttl; u_char proto; u_short crc; ip_address saddr; ip_address daddr; u_int op_pad; }ip_header; typedef struct udp_header{ u_short sport; u_short dport; u_short len; u_short crc; }udp_header; void packet_handler(u_char *param, const struct pcap_pkthdr *header, const u_char *pkt_data); main() { pcap_if_t *alldevs; pcap_if_t *d; int inum; int i=0; pcap_t *adhandle; char errbuf[PCAP_ERRBUF_SIZE]; u_int netmask; char packet_filter[] = "ip and udp"; struct bpf_program fcode; if (pcap_findalldevs_ex(PCAP_SRC_IF_STRING, NULL, &alldevs, errbuf) == -1) { fprintf(stderr,"Error in pcap_findalldevs: %sn", errbuf); exit(1); } for(d=alldevs; d; d=d->next) { printf("%d. %s", ++i, d->name); if (d->description) printf(" (%s)n", d->description); else printf(" (No description available)n"); } if(i==0) { printf("nNo interfaces found! Make sure WinPcap is installed.n"); return -1; }
Updated 24-May-20 13:32pm
Quote:
main()
should be
int main()
The error indicates the missing return type of the main()
function. Because main()
must return an int
, use:
int main() { return 0; }
This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)
CodeProject,
20 Bay Street, 11th Floor Toronto, Ontario, Canada M5J 2N8
+1 (416) 849-8900
- Печать
Страницы: [1] 2 Все Вниз
Тема: Ошибки при компиляции в VS 2015 с ObjectARX SDK 2017 (Прочитано 7873 раз)
0 Пользователей и 1 Гость просматривают эту тему.
Тема содержит сообщение с Решением. Нажмите здесь чтобы посмотреть его.
Вот такая ошибка везде идет при компеляции предыдущего проекта ниже arx 2017.
error C4430: missing type specifier — int assumed. Note: C++ does not support default-int
Что куда прописать чтобы она исчезла, вопрос для тех кто это уже прошел? Хотелось бы не тратить на миграцию месяцы в бесконечных поисках по google.
Где вообще найти быструю и полезную справку как мигрировать на arx 2017. Набираешь например, ошибку и чтобы сразу решение видеть. Есть такая справка у Автодеска?
По установке VS2015 и Arx-wizard’a скажу что «Пути господни неисповедимы» Как случайно все не устанавливалось, так случайно все установилось. Даже wizard заработал. Но время ушло много к сожалению! Кстати, Александр, твой проект с wizard’а думаю помог, после того как его открыл, VS2015 решил докачать доп. модули. Устанавливал все без интернета.
Записан
Wizard в этих версиях работает? Не пробовал установку/удаление делать от Администратора с отключенным UAC?
в остальных студиях всё работает. UAC я выключаю сразу после установки Windows раз и на всегда, но все программы по привычке устанавливаю «от администратора».
А если студию запускать от Администратора?
а я и есть администратор , но если запустить «от администратора», то результат тот же.
error C4430: missing type specifier — int assumed. Note: C++ does not support default-int Что куда прописать чтобы она исчезла, вопрос для тех кто это уже прошел?
а это, батенька, несоответствие типов. тут подход индивидуальный. раньше, например, я пользовался переменной long или int, если нужно было узнать размер выборки (acedSSLength), хотя автодеск рекомендовал пользоваться Adesk::Int32. раньше проходило, а теперь лавочку прикрыли. та же беда с булевыми типами. так что еще раз повторюсь, каждая такая ошибка лечится индивидуально.
Где вообще найти быструю и полезную справку как мигрировать на arx 2017. Набираешь например, ошибку и чтобы сразу решение видеть. Есть такая справка у Автодеска?
а еще было б неплохо чтоб была база с готовыми исходниками разных функций . натягал к себе в нужном порядке и готово. но, увы, такого нет. а по поводу миграции — есть в справке ARX файлик arxmgr.chm. причем желательно устранять не только то, что уже не работает в текущей версии (описано в этом файлике) а и пытаться избавиться от того, что помечено к удалению в дальнейших версиях (тоже написано в этом же самом файлике). на моей памяти самым болезненным был переход на юникод, вот там даже мануал был и умельцы делали автоматические «перегонные аппараты» для исходников. а сейчас просто смысла нет. код, написанный в 2012 студии будет 100% рабочим в 2015, при условии, что выполнены все предписания по миграции из файлика arxmgr.chm.
вот если не работает код, тогда лезу смотреть, что ж они там намудрили и делаю заплатки. в этом переходе основная проблема — несоответствие типов. 21 проект перебрал за час. так что ничего страшного в ошибках нет. просто нужно уметь с ними бороться )))
Записан
21 проект перебрал за час. так что ничего страшного в ошибках нет. просто нужно уметь с ними бороться )))
Спасибо! Хотелось бы конструктива как перебирать, что и где менять чтобы так же за час все исправить. Просто таких ошибок в первом же проекте сотни!!! Напишите пожалуйста, конкретно ваш опыт. Для чего этот форум тогда вообще. Прозой делиться? Хотя бы ссылку дайте.
Записан
Где вообще найти быструю и полезную справку как мигрировать на arx 2017. Набираешь например, ошибку и чтобы сразу решение видеть. Есть такая справка у Автодеска?
Нет. Это вообще не проблема Autodesk. И это не проблема миграции ObjectARX с 2016 на 2017 версию. Это проблема ужесточения требований компилятора С++ в версии 2015.
Хотя бы ссылку дайте.
Первая ссылка в Гугле описывает причину появления ошибки и как с ней бороться: https://msdn.microsoft.com/en-us/library/ms173696.aspx
В частности нельзя описывать функцию/метод так:
-
myfunc()
-
{
-
return 1;
-
}
А нужно описывать:
-
int myfunc()
-
{
-
return 1;
-
}
Записан
Хотелось бы конструктива как перебирать, что и где менять чтобы так же за час все исправить. Просто таких ошибок в первом же проекте сотни!!!
вот если честно, совсем не понял. ну, есть ошибки. и что? исправляем ошибку и становится на одну меньше. и так аж до тех пор, пока проект не соберется в arx-файл.
Для чего этот форум тогда вообще. Прозой делиться?
ну, иногда и так получается. вот, например, если человек задает конкретный вопрос, он получает конкретный ответ. а если хочется поговорить о жизни , то тогда можно и прозой поделиться.
ну и если позволите, встречный вопрос. как у вас с С++ и с владением студией в принципе обстоят дела? Если честно, первое, что интуитивно хочется сделать увидев сообщение об ошибке компиляции, это клацнуть дважды на строку с ошибкой, чтоб сама студия подсветила строку в коде, где эта ошибка появляется. ну и глядя уже на строку кода, а не на сообщение error C4430: missing type specifier — int assumed. Note: C++ does not support default-int, гарадзо легче сказать, чего от нас хочет студия.
Записан
Для чего этот форум тогда вообще. Прозой делиться?
Это форум для помощи тем, которые хотят чтобы им помогали. Для тех, кто и сам прикладывает усилия для того, чтобы решить свой вопрос и для этого занимается самообразованием. И для тех, которые готовы помогать другим.
Мне показалось или я давал совершенно конкретные ответы на поставленные тобою вопросы? И неоднократно. Или это мне приснилось и я только прозой делюсь?
Записан
В частности нельзя описывать функцию/метод так:
Вот это понятно. Конкретно приведен код — уже помощь. Всегда тебя благодарю!
На счет прозы это я на письмо Николая отписал, погорячился. Понятно что ошибка, но что на такую рутину придется уйму времени убить не ожидал. Думал что любимое сообщество подскажет какой-нибудь ТРЮК как проблему быстро решить, сэкономить время. А не бери лопату и разгребай очередную гору выросшую на ровном месте. Все на голову разработчикам валится. Сколько их осталось в России уже?
На счет, что Автодеск ни при чем, может и да, но косвенно, не мигрируешь на 2017 не пустят в их магазин… Сделали бы какую нибудь директиву чтобы одним махом проблема исчезла…
Записан
Портирование на VS 2015
error C2664: ‘Acad::ErrorStatus AcDbDatabase::readDwgFile(AcDwgFileHandle *,bool,const wchar_t *)’: cannot convert argument 2 from ‘int’ to ‘AcDbDatabase::OpenMode’
-
AcDbDatabase db;
-
db.readDwgFile(LPCTSTR(str), _SH_DENYWR); //error здесь на точке
-
SetListMark(arr, &db);
Что делать? В google решения не нашел.
Записан
Что делать?
Найти .h файл с методом AcDbDatabase::readDwgFile (это dbmain.h) и прочитать:
// Note that the old overload of this method which took an int _SH_DENYxxx
// arg is removed. You have to call this method using the OpenMode arg
// to specify the access and sharing. See above OpenMode comments for
// the mapping from _SH_DENYxxx to kXXXShare enum vals.
Сделать вывод, что вместо _SH_DENYWR следует использовать kForReadAndReadShare, а так как это значение по-умолчанию, то достаточно будет:
db.readDwgFile(LPCTSTR(str));
Записан
Опыт растет в переходе на arx2017 и vs2015, спасибо за Ц.У.. Опять спрашиваю то, что не знаю. Как пройти очередную ошибку, где искать решение?
1>cls_base.cpp(1725): error C2678: binary ‘>>’: no operator found which takes a left-hand operand of type ‘VBaseFile’ (or there is no acceptable conversion)
-
void cLwpolilineC::setZ(double z)
-
{
-
for(int i=0;i<arrPt.length();i++)
-
arrPt[i].z = z;
-
normal = AcGeVector3d::kZAxis;
-
}
-
void cLwpolilineC::loadBin(VBaseFile &file)
-
{
-
cContour::loadBin(file);
-
int n;
-
file >> normal >> (int)isClose >> n; //error on the second >> for vs2015
Записан
Тут я тебе ничем не помогу. Я понятия не имею что это за класс VBaseFile, у которого компилятор C++ не находит перегруженный оператор ‘>>’, принимающий в качестве параметра объекты классов AcGeVector3d и/или int
Записан
Засада. А какова природа данной ошибки. Опять несоответствие типов или что-то другое? Что в хелпе миграции на эту тему есть, если есть вообще? В VS2012 проблем не было.
Или еще более подробней можно объяснить. Ну увижу я этот класc, что в нем искать? Что значит (or there is no acceptable conversion) перевод ясен, т.е. это только для VS2015 где конвертация типов изменилась? Где рыть?
Записан
А какова природа данной ошибки
Не знаю.
Опять несоответствие типов или что-то другое?
Вполне возможно.
Что в хелпе миграции на эту тему есть, если есть вообще?
С вероятностью 90% это не имеет никакого отношения к ObjectARX.
Ну увижу я этот класc, что в нем искать?
Искать operator >>(), смотреть есть ли он, какие параметры принимает и т.д. Не видя кода ничего подробнее сказать не могу.
« Последнее редактирование: 10-06-2016, 14:11:33 от Александр Ривилис »
Записан
скорей всего не хватает каких-то инклудов. от студии к студии такое наблюдается. вряд ли изобретался велосипед с нуля (уж очень конструкция похожа на std::ifstream), так что скорей всего спасет вставка в начало файла чего-то типа (а может и всего сразу ):
-
#include <string>
-
#include <iostream>
-
#include <vector>
-
using namespace std;
ps: вообще-то, чтоб точно понять что это за ошибка, нужно знать, что из себя представляет класс VBaseFile.
Записан
скорей всего не хватает каких-то инклудов.
Не помогло
ps: вообще-то, чтоб точно понять что это за ошибка, нужно знать, что из себя представляет класс VBaseFile.
Высылаю полный текст ошибки и сам класс чтобы понять точно ошибку. Надеюсь поможете. Непонятно почему в самом классе VS не находит ошибки? Это так, вопрос для общего развития.
Записан
- Печать
Страницы: [1] 2 Все Вверх
13 Years Ago
This mostly appears when you have not specified main to return a certain type, Though that is just in general , It would be better if you would post your code down.
main(){//Causes the error
int main(){//No Error,
Though that is pretty generalised, Hope its the same error,
Ancient Dragon
5,243
Achieved Level 70
Team Colleague
Featured Poster
13 Years Ago
It would be helpful if you told us which line the error occurred on so that we don’t have to read the whole program to find out.
JasonHippy
724
Practically a Master Poster
13 Years Ago
As Sky has mentioned, there are several potential causes of this error.
I think it’s most often related to incorrectly/ambiguously defined variables, function parameters or function return types.
From what I understand of this (I have encountered it before):
In MS’s attempts to make VS2005 more conformable to the standard, VS2005 onwards requires all variables, parameters and return types to be explicitly declared.
In previous editions of VS, the compiler would assume int for variables which were ambiguously defined…
Consider this as a random example:
for ( int i = 0; i < (const)(myVector.size()); i++ )
{
// Do something....
}
QUICK NOTE: Assume that myVector is declared elsewhere as a std::vector!
in VS 2003 and earlier, the above code would compile correctly without errors or warnings, but in VS 2005 onwards you’ll get the C4430 error/warning message.
Now what was wrong with the above code?
Well, if you look at the for loop, particularly the conditional part, what do we see?
i<(const)(myVector.size());
From the first part of the for loop, We can see that i is declared as an int, but what about myVector.size() in the conditional part?? What’s going on there?
Well, the return value of the call to myVector.size() has been cast to const, (probably by some insanely overzealous member of the const-correctness brigade!), but what would that convert to? const what?
In previous versions of VS (2003 and earlier), the compiler would assume that int was implied, so the returned value would be cast to int (or const int in this example) and the for loop would work.
Note: The call to myVector.size() returns a size_t, not an int. So without ‘captain const’ performing his stupid cast and the compilers resultant assumption, the for loop would’ve probably failed to compile, as I believe int and size_t are incompatible for direct comparison!
For VS2005 onwards, the compiler will no longer make any assumptions in these sorts of cases and will quite correctly flag an error.
So in order to get the code in the example to compile in VS2005 onwards, you’d probably have to change the for loops declaration to be something like:
for ( int i = 0; i < (int)(myVector.size()); i++ )
{
// Do something....
}
or perhaps (depending on what’s going to happen inside the body of the loop):
for ( size_t i = 0; i < myVector.size(); i++ )
{
// Do something....
}
I can’t guarantee that the above info is absolutely 100% correct, but it’s what I’ve been led to believe…It worked for me! (but I have been known to be wrong from time to time!)
I also can’t guarantee that these are the only types of situations in which the error will be thrown, there may be other conditions where this particular error is caused!
Hope this is of some help!
Jas.
Narue
5,707
Bad Cop
Team Colleague
13 Years Ago
>#include <winbase.h>
Remove that line. It’s superfluous anyway as windows.h correctly includes winbase.h.
ArkM
1,090
Postaholic
13 Years Ago
After that place all system header includes in StdAfx.h (and remove them from .cpp files (after #include "StdAfx.h"
)…