Ошибка e0029 требуется выражение

0 / 0 / 0

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

Сообщений: 52

1

05.04.2018, 16:22. Показов 5054. Ответов 5


Ругается на эту строчку: Client.Connect(ip ^, port); , красным подчёркнута запятая после ip ^
Пробовал так: Client.Connect(ip, port) , тогда ругается на точку между Client и Connect
Как исправить строку?

__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь

0

OwenGlendower

Администратор

Эксперт .NET

15226 / 12265 / 4902

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

Сообщений: 24,867

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

05.04.2018, 18:01

2

KirillConsolelr,

C++
1
Client->Connect(ip, port)

0

0 / 0 / 0

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

Сообщений: 52

05.04.2018, 18:36

 [ТС]

3

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

Client->Connect(ip, port)

Тоже самое, только красным подчёркнуто ->

0

Hitoku

1754 / 1346 / 1407

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

Сообщений: 4,267

06.04.2018, 12:00

4

А так?

C++
1
Client::Connect(ip, port)

0

0 / 0 / 0

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

Сообщений: 52

06.04.2018, 12:24

 [ТС]

5

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

Client::Connect(ip, port)

Теперь несколько ошибок, и красным светится Client

0

Администратор

Эксперт .NET

15226 / 12265 / 4902

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

Сообщений: 24,867

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

06.04.2018, 12:53

6

KirillConsolelr, покажи весь код и выложи полные тексты ошибок.

0

  • Remove From My Forums
  • Общие обсуждения

  • Почему не работает CUDA может кто помочь с установкой?

    Скачал CUDA Toolkit 10.0 x86_64 и установил

    Создаю проект с помощью Visual Studio 2017 у меня сразу же появляется шаблон и 29 ошибок, первые из них он не понимает библиотеки  #include «cuda_runtime.h» и #include
    «device_launch_parameters.h» 

    При нажатии скомпилировать появляется 30-тая: 

    Серьезность Код
    Описание Проект
    Файл Строка
    Состояние подавления
    Ошибка The CUDA Toolkit v10.0 directory » does not exist.  Please verify the CUDA Toolkit is installed properly or define the CudaToolkitDir property to resolve this error.
    matrix_myltiply C:Program Files (x86)Microsoft Visual Studio2017CommunityCommon7IDEVCVCTargetsBuildCustomizationsCUDA 10.0.targets
    536

    Что я мог пропустить или забыть???

    Видеокарта GTX 950M

    NET Framework 4.0

    • Изменено

      8 ноября 2018 г. 17:06

    • Изменен тип
      Maksim MarinovMicrosoft contingent staff, Moderator
      3 декабря 2018 г. 12:28
      тема неактивна
  • Forum
  • Beginners
  • error E0029 Expected an expression

error E0029 Expected an expression

I keep getting an error message that’s saying expected an expression, or error code E0029. I’m new at all this programming stuff, so any advice would be helpful. Here’s what i have been working on so far:

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
49
50
51
52
53
54
55
56
57
  #include<iostream>
#include<iomanip>
#include<fstream>
#include<array>
using namespace std;

void displayChart(int visitors[][9], int Visitors);

void displayRecNonRec(int rec_nonRec[][1], int Rec_nonRec);

void displayTentRv(int tent_Rv[][4], int Tent_Rv);

void displayVisitorsPerMonth(int visitorsPerMonth[], int visitors_month);

int main()
{
	int visitors[12][9];
	int Visitors = visitors[12][9];
	displayChart(visitors[][9], Visitors);
}

void displayChart(int visitors[][9], int Visitors)
{
	int visitors_Jan[1];
	int visitors_Feb[2];
	int visitors_Mar[3];
	int visitors_Apr[4];
	int visitors_May[5];
	int visitors_Jun[6];
	int visitors_Jul[7];
	int visitors_Aug[8];
	int visitors_Sep[9];
	int visitors_Oct[10];
	int visitors_Nov[11];
	int visitors_Dec[12];
}

void displayRecNonRec(int rec_nonRec[][1], int Rec_nonRec)
{
}

void displayTentRv(int tent_Rv[][4], int Tent_Rv)
{
}

void displayVisitorsPerMonth(int visitorsPerMonth[], int visitors_month)
{
}

And here's the section where the problem keeps occurring.

int main()
{
	int visitors[12][9];
	int Visitors = visitors[12][9];
	displayChart(visitors[][9], Visitors);
} 

You seem to have your main() function defined twice — once at line 15, and once at line 52.

Also, at lines 18 and 55,

visitors[12][9]

is past the end of the array. Remember, in C and C++, array indices begin at 0, so

visitors[11][8]

is the final element of the array.

Last edited on

Lines 49 — 57 are a duplication of

main

, delete them.

Line 17 creates an uninitialized 2D array, any values contained are garbage values.

Line 18 you are trying to assign an out of bounds value in your 2D array. Arrays are indexed starting at 0 (zero), the end-most element is at [11][8].

Line 19 expects a 2D array as the first parameter.
displayChart(visitors, Visitors);

The

displayChart

function is creating 12 local 1D arrays. Are you wanting to use the passed 2D array?

The main issue with your code is how it deals with arrays.
I suggest starting small with a simple program, and then building off it.

This declares a 12×9 2D array (for a total of 108 elements).

1
2
3
4
int main()
{
	int visitors[12][9];
}

To pass this to a function, just pass the name.

1
2
3
4
5
6
int main()
{
    int visitors[12][9];
    int other_parameters = 42;
    func(visitors, other_parameters);
}

On the function side, 2D array syntax is kind of weird, but just note that you need to specify the size of the second dimension.
So something like:

1
2
3
4
5
6
7
8
9
10
11
void func(int visitors[][9], int other_parameters)
{
     // ...
}

int main()
{
	int visitors[12][9];
	int other_parameters = 42;
	func(visitors, other_parameters);
}
1
2
	int visitors[12][9];
	int Visitors = visitors[12][9];

This is wrong. There is no need for your ‘Visitors’ variable. But also, when you declare an array of size [12][9], its actual valid indices you can access range from visitors[0 … 11][0 … 8] (the size of each dimension — 1).
By doing int Visitors = visitors[12][9]; you would be going out of bounds of your array.

MikeyBoy I think you typo’d on your last sentence.

Last edited on

MikeyBoy I think you typo’d on your last sentence.

D’oh… thanks! Fixed.

Thank you Mikey that makes sense now. Furry guy, im trying to have the functions set up to where the program can pull the data from the 2d array yes. Thanks Ganado that makes sense, i guess i was trying to declare the first parameter array with the second parameter in my function, to which i now realize i can’t do that lol

Im writing this program as an assignment, i have tried everyones advice but im still getting nowhere? Im still getting an error message with the expected an expression displaychart(visitors[][9], Visitors) The first parameter with the array is where im getting the error. It keeps saying to add an expression in the brackets of the Row of the array? But when i put something there, it then says that its incompatible with parameter type? Anyways after working on this again im still coming up with nothing. I’m trying to get this program to take values from a user, and then have those values transferred from functions back to main?

Post your current code so that we can see exactly what you’re got now.

Look at your function call:

displaychart(visitors[][9], Visitors)

What is visitors[][9] supposed to mean here? What did you intend that empty array index [] to indicate?

Also, note that that second array index, [9], is still one higher than any valid array index, as several of us have already explained.

Also, the name of your function is displayChart, not displaychart.

Edit: Looking at the definition of displayChart, that first argument is supposed to be the array as a whole. So you should just be using the name of the array as the argument:

displayChart(visitors, Visitors)

And it seems you haven’t addressed what Ganado said about the Visitors argument. What is it supposed to be?

Last edited on

Topic archived. No new replies allowed.

Это программный код C ++ для отображения значений массивов array1 и array2, но я получаю ошибку времени компиляции как «Требуется постоянное выражение». Пожалуйста помоги

void display(const int const1 = 5)
{
const int const2 = 5;
int array1[const1];
int array2[const2];

for(int i = 1 ; i < 5 ; i++)
{
array1[i] = i;
array2[i] = i * 10;

std::cout << array1[i] << std::endl;
}
}

void main()
{
display(5);
}

2

Решение

В C ++ const не всегда constexpr, В те дни, constexpr не существовало, поэтому единственный способ иметь постоянную времени компиляции состоял в том, чтобы использовать const с буквальным, или использовать enumпотому что оба из них легко для компилятора, чтобы проверить значение.

Однако в C ++ 11 мы добавили constexpr, который гарантирует, что constexpr переменная имеет значение, доступное во время компиляции, и заявляет, что constexpr Функция может быть оценена во время компиляции, если все аргументы constexpr тоже.

В своем коде вы можете написать свою переменную const2 как это:

void display(const int const1=5)
{
constexpr int const2 = 5;

// ...
}

Теперь ваш код гораздо более выразителен в том, что вы делаете. вместо того, чтобы полагать, что const может быть доступен во время компиляции, вы говорите: «эта переменная имеет значение, известное во время компиляции, вот значение».

Однако, если вы попытаетесь изменить const1, вы получите ошибку. Параметры, даже со значением по умолчанию всегда в качестве значения, известного во время выполнения. Если значение известно только во время выполнения, его нельзя использовать в параметрах шаблона или размере массива.

Если вы хотите, чтобы ваша функция могла receive Значение const1 как константное выражение, откуда вы можете получить его как параметр шаблона, так как параметры шаблона всегда известны во время компиляции.

template<int const1 = 5>
void display()
{
constexpr int const2 = 5;

int array1[const1];
int array2[const2];
}

Вам придется вызывать вашу функцию так:

// const1 is 5
display();

// const1 is 10
display<10>();

Если вы хотите узнать больше о шаблонах, проверьте Шаблоны функций, или это руководство

1

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

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

Имеется приложение на C#, которое должно передать в dll массив структур. Результат обработки массива функция dll должна возвратить в виде переменной int. Поиск показал, что направление работы — это использование технологии PInvoke (см. https://docs.microsoft.com/ru-ru/cpp/dotnet/calling-native-functions-from-managed-code?view=msvc-170). C этим я еще буду разбираться. Сейчас столкнулся с проблемой корректного написания кода самой dll. Все примеры, что мне удалось найти, предлагают такой синтаксис записи: return a, где a — некоторая переменная. Visual Studio же предлагает автоматически вариант кода, который пока что распознается компилятором как ошибочный. Поиск по коду ошибки (E0029 — «Требуется выражение») ничего толком не дал. Вопрос — как корректно задать последний оператор функции, возвращающий переменную?

Привожу код библиотеки.
Точка входа:

// dllmain.cpp : Определяет точку входа для приложения DLL.
#include "pch.h"

BOOL APIENTRY DllMain( HMODULE hModule,
                       DWORD  ul_reason_for_call,
                       LPVOID lpReserved
                     )
{
    switch (ul_reason_for_call)
    {
    case DLL_PROCESS_ATTACH:
    case DLL_THREAD_ATTACH:
    case DLL_THREAD_DETACH:
    case DLL_PROCESS_DETACH:
        break;
    }
    return TRUE;
}

Заголовочный файл:

#pragma once

#ifdef PACKINGDLL_EXPORTS
#define PACKINGDLL_API __declspec(dllexport)
#else
#define PACKINGTDLL_API __declspec(dllimport)
#endif

typedef struct _PACKAGINGDATA
{
    int Lx;
    int Ly;
    int Lz;
    double dbl_Mass;
    bool Up;
} PACKAGINGDATA;

extern "C" PACKINGDLL_API int analysis(int int_Number, PACKAGINGDATA * sPD_Packaging_data);

Определение функции:

PACKINGDLL_API int analysis(int int_Number, PACKAGINGDATA* sPD_Packaging_data)
{
    return PACKINGDLL_API int();
}

я использую перечисление, определенное в модуле класса в Excel VBA. Это работает нормально, но я начал получать ошибку компиляции при каждом сравнении переменных перечисления:

в классе CExample:

Enum MyEnum
    Foo
    Bar
End Enum

в другом месте:

If someValue = myEnum.Foo Then

текст .Foo будет выделено, и появится сообщение» ошибка компиляции: требуется постоянное выражение».

поиск в Google предполагает, что это может произойти случайным образом, и исправления, такие как перезапуск среды IDE или добавление пробела после объявления перечисления может заставить ее снова начать работать.

  • http://www.tek-tips.com/viewthread.cfm?qid=1355882
  • http://www.vbforums.com/showthread.php?405564-RESOLVED-Constant-Expression-Required-Error-when-checking-Enum

это действительно известная ошибка в VBA? Есть ли что-нибудь, что я могу сделать, чтобы избежать этого, или надежно заставить VBA работать снова, если это произойдет культур вверх?

в моем случае закрытие и повторное открытие Excel не помогло. Извините, пока я перезагружаю компьютер.

обновление после перезагрузки:

проблема сохранялась после перезагрузки моей машины, что удивительно. Я попытался добавить Public перед определением перечисления (они должны быть public по умолчанию но я подумал, что попробую), и ошибка исчезла. Я удалил Public ключевое слово (так что мы вернулись к моему оригиналу код), и он по-прежнему компилируется и работает нормально.

похоже, что это случайная ошибка в VBA. Мне было бы интересно узнать, часто ли опытные разработчики находят это — вы бы посоветовали не использовать перечисления? Или он появляется один раз в голубой луне, и мне просто не повезло?

обновление после 6 недель дальнейшего развития:

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

3 ответов


Как отмечено в вопросе, я избавился от ошибки, отредактировав и сохранив определение перечисления, а затем отменив редактирование и сохранение снова. Недавно проделав еще несколько работ над проектом, я нашел другую, но похожую проблему — одна строка кода даст ошибку «несоответствие типов», где не было несоответствия типов и где одна и та же функция, неизменная, работала нормально с теми же входами.

некоторые из прерывистых ошибок, которые я вижу, могут быть вызваны накоплением кода артефакты в файле Excel-после некоторого чтения я обнаружил, что код VBA компилируется и сохраняется в файл. Нет опции» очистить «или» перестроить все » — VBA пытается решить для себя, какие инкрементные изменения необходимы. Это может привести ко всем видам нечетного поведения во время выполнения в проектах, где вы внесли много изменений в код. Вероятно, это причина ошибок перечисления, которые я обнаружил во время начальной разработки этой книги. Раздел»что значит декомпилировать и Компактный в VBA» в этой статье дан хороший обзор.

большинство упоминаний этой проблемы рекомендуют использовать VBA CodeCleaner:http://www.appspro.com/Utilities/CodeCleaner.htm. Чип Пирсон, известный и уважаемый эксперт VBA, говорит: «Я очень сильно рекомендую эту надстройку». Я удивлен, что не сталкивался с этим раньше!


Кажется, ошибка.

скопируйте код того же модуля в новый и перекомпилируйте. Для некоторых это все решает.

существует аналогичное исправление, которое включает редактирование и отмену строки определения перечисления.

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


старый вопрос, но только что испытал это. Удален Public definer на перечислении, и он скомпилирован просто отлично. Не перезапускал IDE. Удивительно, что это все еще здесь.


  • Forum
  • Beginners
  • error E0029 Expected an expression

error E0029 Expected an expression

I keep getting an error message that’s saying expected an expression, or error code E0029. I’m new at all this programming stuff, so any advice would be helpful. Here’s what i have been working on so far:

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
49
50
51
52
53
54
55
56
57
  #include<iostream>
#include<iomanip>
#include<fstream>
#include<array>
using namespace std;

void displayChart(int visitors[][9], int Visitors);

void displayRecNonRec(int rec_nonRec[][1], int Rec_nonRec);

void displayTentRv(int tent_Rv[][4], int Tent_Rv);

void displayVisitorsPerMonth(int visitorsPerMonth[], int visitors_month);

int main()
{
	int visitors[12][9];
	int Visitors = visitors[12][9];
	displayChart(visitors[][9], Visitors);
}

void displayChart(int visitors[][9], int Visitors)
{
	int visitors_Jan[1];
	int visitors_Feb[2];
	int visitors_Mar[3];
	int visitors_Apr[4];
	int visitors_May[5];
	int visitors_Jun[6];
	int visitors_Jul[7];
	int visitors_Aug[8];
	int visitors_Sep[9];
	int visitors_Oct[10];
	int visitors_Nov[11];
	int visitors_Dec[12];
}

void displayRecNonRec(int rec_nonRec[][1], int Rec_nonRec)
{
}

void displayTentRv(int tent_Rv[][4], int Tent_Rv)
{
}

void displayVisitorsPerMonth(int visitorsPerMonth[], int visitors_month)
{
}

And here's the section where the problem keeps occurring.

int main()
{
	int visitors[12][9];
	int Visitors = visitors[12][9];
	displayChart(visitors[][9], Visitors);
} 

You seem to have your main() function defined twice — once at line 15, and once at line 52.

Also, at lines 18 and 55,

visitors[12][9]

is past the end of the array. Remember, in C and C++, array indices begin at 0, so

visitors[11][8]

is the final element of the array.

Last edited on

Lines 49 — 57 are a duplication of

main

, delete them.

Line 17 creates an uninitialized 2D array, any values contained are garbage values.

Line 18 you are trying to assign an out of bounds value in your 2D array. Arrays are indexed starting at 0 (zero), the end-most element is at [11][8].

Line 19 expects a 2D array as the first parameter.
displayChart(visitors, Visitors);

The

displayChart

function is creating 12 local 1D arrays. Are you wanting to use the passed 2D array?

The main issue with your code is how it deals with arrays.
I suggest starting small with a simple program, and then building off it.

This declares a 12×9 2D array (for a total of 108 elements).

1
2
3
4
int main()
{
	int visitors[12][9];
}

To pass this to a function, just pass the name.

1
2
3
4
5
6
int main()
{
    int visitors[12][9];
    int other_parameters = 42;
    func(visitors, other_parameters);
}

On the function side, 2D array syntax is kind of weird, but just note that you need to specify the size of the second dimension.
So something like:

1
2
3
4
5
6
7
8
9
10
11
void func(int visitors[][9], int other_parameters)
{
     // ...
}

int main()
{
	int visitors[12][9];
	int other_parameters = 42;
	func(visitors, other_parameters);
}
1
2
	int visitors[12][9];
	int Visitors = visitors[12][9];

This is wrong. There is no need for your ‘Visitors’ variable. But also, when you declare an array of size [12][9], its actual valid indices you can access range from visitors[0 … 11][0 … 8] (the size of each dimension — 1).
By doing int Visitors = visitors[12][9]; you would be going out of bounds of your array.

MikeyBoy I think you typo’d on your last sentence.

Last edited on

MikeyBoy I think you typo’d on your last sentence.

D’oh… thanks! Fixed.

Thank you Mikey that makes sense now. Furry guy, im trying to have the functions set up to where the program can pull the data from the 2d array yes. Thanks Ganado that makes sense, i guess i was trying to declare the first parameter array with the second parameter in my function, to which i now realize i can’t do that lol

Im writing this program as an assignment, i have tried everyones advice but im still getting nowhere? Im still getting an error message with the expected an expression displaychart(visitors[][9], Visitors) The first parameter with the array is where im getting the error. It keeps saying to add an expression in the brackets of the Row of the array? But when i put something there, it then says that its incompatible with parameter type? Anyways after working on this again im still coming up with nothing. I’m trying to get this program to take values from a user, and then have those values transferred from functions back to main?

Post your current code so that we can see exactly what you’re got now.

Look at your function call:

displaychart(visitors[][9], Visitors)

What is visitors[][9] supposed to mean here? What did you intend that empty array index [] to indicate?

Also, note that that second array index, [9], is still one higher than any valid array index, as several of us have already explained.

Also, the name of your function is displayChart, not displaychart.

Edit: Looking at the definition of displayChart, that first argument is supposed to be the array as a whole. So you should just be using the name of the array as the argument:

displayChart(visitors, Visitors)

And it seems you haven’t addressed what Ganado said about the Visitors argument. What is it supposed to be?

Last edited on

Topic archived. No new replies allowed.

  • Remove From My Forums
  • Общие обсуждения

  • Почему не работает CUDA может кто помочь с установкой?

    Скачал CUDA Toolkit 10.0 x86_64 и установил

    Создаю проект с помощью Visual Studio 2017 у меня сразу же появляется шаблон и 29 ошибок, первые из них он не понимает библиотеки  #include «cuda_runtime.h» и #include
    «device_launch_parameters.h» 

    При нажатии скомпилировать появляется 30-тая: 

    Серьезность Код
    Описание Проект
    Файл Строка
    Состояние подавления
    Ошибка The CUDA Toolkit v10.0 directory » does not exist.  Please verify the CUDA Toolkit is installed properly or define the CudaToolkitDir property to resolve this error.
    matrix_myltiply C:Program Files (x86)Microsoft Visual Studio2017CommunityCommon7IDEVCVCTargetsBuildCustomizationsCUDA 10.0.targets
    536

    Что я мог пропустить или забыть???

    Видеокарта GTX 950M

    NET Framework 4.0

    • Изменено

      8 ноября 2018 г. 17:06

    • Изменен тип
      Maksim MarinovMicrosoft contingent staff, Moderator
      3 декабря 2018 г. 12:28
      тема неактивна

Mukudori

0 / 0 / 0

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

Сообщений: 6

1

Инициализация класса через многоточие

16.08.2019, 19:54. Показов 4203. Ответов 11

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


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

Пытаюсь воспользоваться библиотекой https://github.com/gosha20777/keras2cpp

Но не могу ее собрать. Писал автору https://github.com/gosha20777/keras2cpp/issues/16 но он отвечать не торопится.

Может тут мне чего подскажут.

Проблема заключается в том, что когда инициализируется класс Tensor через initializer list, то компилятор выдает на это ошибку C2440.

Кроме того, в шаблоне самого класса, редактор подчеркивает красным троеточие в 6 строке, с ошибкой E0029 (требуется выражение). Подозреваю что из этого и выходит ошибка C2440.

C++
1
2
3
4
5
6
7
8
9
10
11
12
class Tensor {
        public:
            Tensor() = default;
            template <
                typename... Size,
                typename = std::enable_if_t<(... && std::is_integral_v<Size>)>>
            Tensor(Size ... sizes) {
                resize(static_cast<size_t>(sizes)...);
            }
 
          
    };



0



Неэпический

17819 / 10592 / 2044

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

Сообщений: 26,636

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

16.08.2019, 19:57

2

Mukudori, студия какая? C++17 включен?



0



6577 / 4562 / 1843

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

Сообщений: 13,726

16.08.2019, 20:23

3

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

Может тут мне чего подскажут.
Проблема заключается в том, что когда инициализируется класс Tensor через initializer list, то компилятор выдает на это ошибку C2440.

Может ты покажешь весь код?



0



0 / 0 / 0

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

Сообщений: 6

16.08.2019, 20:39

 [ТС]

4

Croessmah, студия 17. Если я не ошибаюсь c++17 там стоит по умолчанию

oleg-m1973, весь код лежит Здесь. Я просто подключаю model.h, ничего оттуда не использую, и проект валится на этапе сборки по причине, которую я указал выше



0



6577 / 4562 / 1843

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

Сообщений: 13,726

16.08.2019, 20:45

5

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

роблема заключается в том, что когда инициализируется класс Tensor через initializer list, то компилятор выдает на это ошибку C2440.
Кроме того, в шаблоне самого класса, редактор подчеркивает красным троеточие в 6 строке, с ошибкой E0029 (требуется выражение). Подозреваю что из этого и выходит ошибка C2440.

initializer_list вроде так не работает, там нужен явный конструктор Tensor(std::initializer_list<size_t> …….



0



Mukudori

0 / 0 / 0

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

Сообщений: 6

16.08.2019, 20:55

 [ТС]

6

Получается в 6 строчке так должно быть?

C++
1
 typename = std::enable_if_t<(std::initializer_list<size_t> && std::is_integral_v<Size>)>>



0



oleg-m1973

6577 / 4562 / 1843

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

Сообщений: 13,726

16.08.2019, 21:00

7

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

Получается в 6 строчке так должно быть?

Нет, нужен второй конструктор

C++
1
Tensor(std::initializer_list<size_t> sizes) {

Добавлено через 1 минуту
А зачем его вообще инициализировать через initializer_list?



1



0 / 0 / 0

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

Сообщений: 6

16.08.2019, 21:08

 [ТС]

8

А как тогда быть с многоточием, оно по прежнему будет считаться синтаксической ошибкой?

Добавлено через 4 минуты

Цитата
Сообщение от oleg-m1973
Посмотреть сообщение

А зачем его вообще инициализировать через initializer_list?

Не могу знать, такова задумка автора библиотеки. Я просто не хочу все ломать



0



oleg-m1973

6577 / 4562 / 1843

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

Сообщений: 13,726

16.08.2019, 21:51

9

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

Решение

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

А как тогда быть с многоточием, оно по прежнему будет считаться синтаксической ошибкой?

Это не в многоточии ошибка, а когда ты передаёшь в конструктор неправильные аргументы

Добавлено через 5 минут
Можешь сделать

C++
1
2
3
4
    template <typename... Size>
    Tensor(Size... sizes) 
    {
        static_assert((... && std::is_integral_v<Size>), "Required integral type");

Добавлено через 31 минуту
Только не забывай, что это нифига не одно и то же, что typename = std::enable_if_t<(… && std::is_integral_v<Size>)>.
В случае со static_assert могут возникнуть проблемы, если ты захочешь сделать другие конструкторы.



1



Mukudori

0 / 0 / 0

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

Сообщений: 6

18.08.2019, 16:51

 [ТС]

10

Я удалил все темплейты, переписал инициализацию и ввод параметров через vector<size_t>, теперь на переписанные фунции компилятор выкидывает ошибку LNK4006

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
class Tensor {
        public:
            Tensor() = default;
           
 
            Tensor(std::vector<size_t> sizes) {
                resize(sizes);
            }
 
            Tensor(Stream& file, size_t rank = 1);
 
          
            static auto empty(std::vector<size_t> sizes);
            void resize(std::vector<size_t> sizes) noexcept;
 
      std::vector<size_t> dims_;
            std::vector<float> data_;
    };



0



0 / 0 / 0

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

Сообщений: 6

19.08.2019, 19:42

 [ТС]

11

Пофиксил. Нужно было прописать тело функций внутри класса. Пока проект собирается без ошибок, но я еще не юзал из библиотеки ни одной функции.

Добавлено через 1 час 11 минут
Отлично! Тестовая модель нейронки работает под движком UE4. На этом тему можно закрыть. Спасибо огромное за подсказки.



0



oleg-m1973

6577 / 4562 / 1843

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

Сообщений: 13,726

19.08.2019, 21:05

12

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

Я удалил все темплейты, переписал инициализацию и ввод параметров через vector<size_t>,

А как у тебя вообще вызывается конструктор для этого Tensor, и зачем? Из того, что ты показал, лучше сделать

C++
1
Tensor(std::initializer_list<size_t> sizes)

Добавлено через 1 минуту
А из того, что ты показал ещё —
Tensor(std::vector<size_t> sizes) {
resize(std::move(sizes));
}



0



Имеется приложение на C#, которое должно передать в dll массив структур. Результат обработки массива функция dll должна возвратить в виде переменной int. Поиск показал, что направление работы — это использование технологии PInvoke (см. https://docs.microsoft.com/ru-ru/cpp/dotnet/calling-native-functions-from-managed-code?view=msvc-170). C этим я еще буду разбираться. Сейчас столкнулся с проблемой корректного написания кода самой dll. Все примеры, что мне удалось найти, предлагают такой синтаксис записи: return a, где a — некоторая переменная. Visual Studio же предлагает автоматически вариант кода, который пока что распознается компилятором как ошибочный. Поиск по коду ошибки (E0029 — «Требуется выражение») ничего толком не дал. Вопрос — как корректно задать последний оператор функции, возвращающий переменную?

Привожу код библиотеки.
Точка входа:

// dllmain.cpp : Определяет точку входа для приложения DLL.
#include "pch.h"

BOOL APIENTRY DllMain( HMODULE hModule,
                       DWORD  ul_reason_for_call,
                       LPVOID lpReserved
                     )
{
    switch (ul_reason_for_call)
    {
    case DLL_PROCESS_ATTACH:
    case DLL_THREAD_ATTACH:
    case DLL_THREAD_DETACH:
    case DLL_PROCESS_DETACH:
        break;
    }
    return TRUE;
}

Заголовочный файл:

#pragma once

#ifdef PACKINGDLL_EXPORTS
#define PACKINGDLL_API __declspec(dllexport)
#else
#define PACKINGTDLL_API __declspec(dllimport)
#endif

typedef struct _PACKAGINGDATA
{
    int Lx;
    int Ly;
    int Lz;
    double dbl_Mass;
    bool Up;
} PACKAGINGDATA;

extern "C" PACKINGDLL_API int analysis(int int_Number, PACKAGINGDATA * sPD_Packaging_data);

Определение функции:

PACKINGDLL_API int analysis(int int_Number, PACKAGINGDATA* sPD_Packaging_data)
{
    return PACKINGDLL_API int();
}

Возможно, вам также будет интересно:

  • Ошибка e02 baxi eco four
  • Ошибка e018 стиральная машина bosch
  • Ошибка e014 0001 canon
  • Ошибка e0111 микроволновка bosch
  • Ошибка e011 на духовке бош

  • Понравилась статья? Поделить с друзьями:
    0 0 голоса
    Рейтинг статьи
    Подписаться
    Уведомить о
    guest

    0 комментариев
    Старые
    Новые Популярные
    Межтекстовые Отзывы
    Посмотреть все комментарии