Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/4: Рейтинг темы: голосов - 4, средняя оценка - 5.00
 Аватар для Pro100Tom
154 / 31 / 11
Регистрация: 29.10.2012
Сообщений: 397

Problem with passing a list variable by a reference

18.09.2013, 23:06. Показов 923. Ответов 12
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте. Не знал, как нормально сформулировать заглавие на русском! В общем такая проблема. Есть C++ Win32 Empty Project Application. Программа: как всегда улучшаю свою предыдущую версию рендеринга объекта, считываемого из obj файла. На этот раз разделяю программу по отдельным файлам (классам). В главном файле создал переменную типа Vertex (этот тип я реализовал в другом классе (т.е. в другом файле (VertexClass))). Ну и создал List этих Vertex'ов.

Что я хочу сделать? У меня есть метод (опять же в другом, новом классе (ModelClass)), который открывает файл и считывает с него точки (vertex'ы). Так я хочу эти вертексы записать в list, который я пересылаю в этот метод как параметр-ссылка (pass by reference). Но вылезают ошибки, простые, но странные, на мой взгляд. Не могу никак решить. Гуглил: пишут, что порядок include файлов можно неправелен, (но это не по поводу конкретно моего случая). Все переставил двадцать раз, все варианты перепробовал - не помогает. В общем вот код самого главного окна:
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
#include "stdafx.h"
#include "SpinningObjects.h"
#include "ModelClass.h"
...
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    int wmId, wmEvent;
    RECT client;
    GetClientRect(hWnd,&client);
    list<VertexClass> vList, nList; 
    list<FaceClass> vfList, nfList;
 
    switch (message)
    {
    case WM_COMMAND:
        wmId    = LOWORD(wParam);
        wmEvent = HIWORD(wParam);
        // Parse the menu selections:
        switch (wmId)
        {
        case IDM_ABOUT:
            DialogBox(hInst, MAKEINTRESOURCE(IDD_ABOUTBOX), hWnd, About);
            break;
        case IDM_EXIT:
            DestroyWindow(hWnd);
            break;
        default:
            return DefWindowProc(hWnd, message, wParam, lParam);
        }
        break;
    case WM_CREATE:     
        ModelClass *firstExample;
        firstExample = new ModelClass();
        firstExample->LoadModel(&vList, &nList, &vfList, &nfList);
        
        delete firstExample;
        firstExample = 0;
 
        break;
Вот сам ModelClass: header:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#ifndef _MODELCLASS_H_
#define _MODELCLASS_H_
 
#include <list>
#include "VertexClass.h"
#include "FaceClass.h"
 
class ModelClass
{
public:
    ModelClass();
    ~ModelClass();
    void LoadModel(list<VertexClass> *vList, list<VertexClass> *nList, list<FaceClass> *vfList, list<FaceClass> *nfList);
 
private: char buffer[50];
    char op;
    char slash;
};
 
#endif
Вот ModelClass cpp:
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
49
50
51
52
53
#include "stdafx.h"
#include "ModelClass.h"
#include <iostream>
#include <fstream>
#include <sstream>
 
using namespace std;
 
ModelClass::ModelClass()
{
}
 
ModelClass::~ModelClass()
{
    
}
 
void ModelClass::LoadModel(list<VertexClass> *vList, list<VertexClass> *nList, list<FaceClass> *vfList, list<FaceClass> *nfList)
{
    VertexClass tempVertex, tempNormal;
    FaceClass tempVertexFace, tempNormalFace;
    
    /*list<VertexClass> vList, nList; 
    list<FaceClass> vfList, nfList;*/
 
    ifstream infile("teddy.obj", ifstream::in);
 
    while(!infile.eof())
    {
        infile.getline(buffer, 50);
        istringstream iss(buffer, istringstream::in);
        iss>>op;
        if (op=='v')
        {
            iss>>tempVertex.x>>tempVertex.y>>tempVertex.z;
            vList->push_back(tempVertex);
        }
        else if (op=='f')
        {
            iss>>tempVertexFace.a>>slash>>slash>>tempNormalFace.a>>tempVertexFace.b>>slash>>slash>>tempNormalFace.b>>tempVertexFace.c>>slash>>slash>>tempNormalFace.c;
            vfList->push_back(tempVertexFace);
            nfList->push_back(tempNormalFace);
        }   
        else if (op=='n')
        {
            iss>>tempNormal.x>>tempNormal.y>>tempNormal.z;
            nList->push_back(tempNormal);
        }
    }
    infile.close();
 
    return;
}
Вот Vertex header:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#ifndef _VERTEXCLASS_H_
#define _VERTEXCLASS_H_
 
class VertexClass
{
public:
    VertexClass();
    ~VertexClass();
 
    float x, y, z;
 
private:
 
};
 
#endif
Вот Vertex cpp:
C++
1
2
3
4
5
6
7
8
9
10
11
#include "stdafx.h"
#include "VertexClass.h"
 
VertexClass::VertexClass()
{
    
}
 
VertexClass::~VertexClass()
{
}
Face класс аналогичен vertex классу, только там вместо float, int, и вместо x,y,z - a,b,c

Проблема: вылезают 4 ошибки при билде:
Code
1
Error   1   error C2061: syntax error : identifier 'list'   c:\users\tomas\documents\visual studio 2012\projects\spinningobjects\spinningobjects\modelclass.h   40
Code
1
Error   3   error C2061: syntax error : identifier 'list'   c:\users\tomas\documents\visual studio 2012\projects\spinningobjects\spinningobjects\modelclass.h   40
Code
1
Error   4   error C2511: 'void ModelClass::LoadModel(std::list<_Ty> *,std::list<_Ty> *,std::list<FaceClass> *,std::list<FaceClass> *)' : overloaded member function not found in 'ModelClass'   c:\users\tomas\documents\visual studio 2012\projects\spinningobjects\spinningobjects\modelclass.cpp 20
Code
1
Error   2   error C2660: 'ModelClass::LoadModel' : function does not take 4 arguments   c:\users\tomas\documents\visual studio 2012\projects\spinningobjects\spinningobjects\spinningobjects.cpp    172
Помогите пожалуйста!
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
18.09.2013, 23:06
Ответы с готовыми решениями:

Problem - Undefined reference to
Доброго времени суток и спасибо заранее за Вашу помощь. В качестве хобби начал изучать C++. Прочитал немного материала на сайтах и...

thread queue shared variable problem, URGENT.
Hi guys, can anyone help me ? #I try to put in queue my record use threads; use Thread::Queue; use Data::Dumper; my $queue...

Ошибка при компиляции undefined reference to `List<int>::List()'|
Доброго времени суток=) столкнулась с такой проблемой нужно написать шаблон класса. При компиляции выдает ошибку undefined reference to...

12
5499 / 4894 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
18.09.2013, 23:12
Наверное, нужно (в modelclass.h):
C++
1
std::list
0
249 / 219 / 63
Регистрация: 30.07.2013
Сообщений: 465
18.09.2013, 23:13
list он же не просто list, а std::list. Забыли using namespace std; в хедере?
0
 Аватар для Pro100Tom
154 / 31 / 11
Регистрация: 29.10.2012
Сообщений: 397
19.09.2013, 02:03  [ТС]
Нет, лист работает отдельно, без std. Когда я не передаю ссылку а создаю локальную в классе ModelClass, (list) а именно
C++
1
2
/*list<VertexClass> vList, nList; 
    list<FaceClass> vfList, nfList;*/
, то все работает на ура.
0
5499 / 4894 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
19.09.2013, 02:18
Цитата Сообщение от Pro100Tom Посмотреть сообщение
Нет, лист работает отдельно, без std.
Как он может работать, если такой код нескомпилируется?
Миниатюры
Problem with passing a list variable by a reference  
0
5499 / 4894 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
19.09.2013, 02:44
Пишет же, нерусским языком, что не нравится, и где:
syntax error : identifier 'list' ...\modelclass.h
0
 Аватар для Pro100Tom
154 / 31 / 11
Регистрация: 29.10.2012
Сообщений: 397
19.09.2013, 03:05  [ТС]
А у меня почему-то нету этих волнистых подчеркиваний... Почему?
Миниатюры
Problem with passing a list variable by a reference  
0
5499 / 4894 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
19.09.2013, 03:12
Цитата Сообщение от Pro100Tom Посмотреть сообщение
А у меня почему-то нету этих волнистых подчеркиваний... Почему?
Не знаю... Подсказки, при наведении курсора на переменные, появляются?
0
 Аватар для Pro100Tom
154 / 31 / 11
Регистрация: 29.10.2012
Сообщений: 397
19.09.2013, 03:20  [ТС]
Да, но нет ничего об ошибке...
0
5499 / 4894 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
19.09.2013, 03:22
Особенности 12 студии. Достаточно того, что внизу пишет.
0
 Аватар для Pro100Tom
154 / 31 / 11
Регистрация: 29.10.2012
Сообщений: 397
19.09.2013, 04:55  [ТС]
using namespace std;
(facepalm)

Добавлено через 42 минуты
А как сделать так, чтобы листы не удалялись после того как программа попадает в WM_PAINT
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
case WM_CREATE:     
        ModelClass *firstModel;
        firstModel = new ModelClass();
        firstModel->LoadModel(&vList, &nList, &vfList, &nfList);
        
        delete firstModel;
        firstModel = 0;
 
        break;
    case WM_PAINT:
        tempList = vList;
        
        MatrixClass::TransformationMatrix(&tempList);
 
        break;
Когда мы в WM_CREATE, то все значения есть. Когда переходит в другой case, то все листы анулируются...

Добавлено через 34 минуты
Declare
C++
1
2
list<VertexClass> vList, nList, tempList; 
list<FaceClass> vfList, nfList;
before
C++
1
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
0
5499 / 4894 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
19.09.2013, 12:52
Цитата Сообщение от Pro100Tom Посмотреть сообщение
using namespace std;
В заголовочных файлах, крайне не рекомендуется.
1
 Аватар для Игорь с++
500 / 474 / 63
Регистрация: 26.01.2011
Сообщений: 2,033
19.09.2013, 13:03
Pro100Tom, не объявляйте их в wm_create можно объявить сразу после LRESULT CALLBACK, но тогда все переменные надо делать статичными.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
19.09.2013, 13:03
Помогаю со студенческими работами здесь

undefined reference to `variable`
Вобщем то есть заголовочный файл main.h #ifndef _MAIN_H #define _MAIN_H #include &lt;vector&gt; #include &lt;windows.h&gt; using...

C# and Excel problem with list
Доброго времени суток форумчане, столкнулся с такой проблемой, в общем виде задача выглядит следующим образом: Есть курсовой проект в...

Ошибка reference to List is ambiguous; both interface java.util.List in package java.util and class java.awt.List in...
Почему кгда я загружаю пакеты awt, utill вместе в одной проге при обьявлении елемента List я ловлю такую ошибку. 'listTest.java':...

Исправить программу, чтоб на выходе были числа - ошибка Invalid variable reference
Дана программа, нужно исправить так, чтоб на выходе были числа 2 1 3. Исходная: VAR A: INTEGER; B: REAL; PROCEDURE S...

Неубиваемый Response Reference List...
Клиент 852FP1. Поле типа Response Reference List - для фейкового $Ref. Форма открываемая через ws.DialogBox с CFD полем SelectUID и...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru