LINUX.ORG.RU

[QtCreator][WTF?]ошибка: нет декларации ‘string’ в этой области видимости


0

1

Почему-то не получается заставить его увидеть стандартный тип, хотя /usr/include/string.h есть, даже не пришлось include от компилятора добавлять в свойства проекта. Конечно, Qt не используется и лучше бы Code::blocks, или kdevelop, но уже как-то привык к QtCreator`у и, по идее, д.б. какой-то проcтой способ

★★★★
Ответ на: комментарий от stack_protector

так и так пробовал, тоже самое. Странно, что из консоли make ту же ошибку дает. Видимо, нужно makefile вручную переписать

wingear ★★★★
() автор топика
Ответ на: комментарий от r2d2

Почистил make, исчезло. Но возникло что-то совсем непонятное:

harinezumi@emptiness ~/brojects/train $ make
g++ -c  -I/usr/include -I/usr/lib64/gcc/x86_64-pc-linux-gnu/4.5.2/include/g++-v4/iostream  -o main.o main.cpp
gcc -c -pipe -Wall -W -D_REENTRANT -DQT_NO_DEBUG -DQT_GUI_LIB -DQT_SHARED -O3 -I/usr/include -I/usr/lib64/gcc/x86_64-pc-linux-gnu/4.5.2/include/g++-v4/iostream  -o gl3w.o gl3w.c
g++ -Wl,-O3 -Wl,-rpath -o train main.o gl3w.o    -lGL -L/usr/local/lib -Wl,-rpath,/usr/local/lib -lSDL -L/usr/lib64 -L/usr/X11R6/lib -lgthread-2.0 -lrt -lglib-2.0 -lpthread 
/usr/lib/gcc/x86_64-pc-linux-gnu/4.5.3/../../../../lib64/crt1.o: In function `_start':
(.text+0x20): undefined reference to `main'
collect2: выполнение ld завершилось с кодом возврата 1
make: *** [train] Ошибка 1

#include <stdio.h>
#include <stdlib.h>
#include <string>
#include <fstream>
#define GL3_PROTOTYPES 1
#include <GL3/gl3w.h>
#include <glm/glm.hpp>
#include <SDL/SDL.h>

SDL_Window *mainwindow;
SDL_GLContext maincontext; 
GLuint VBO;
void sdldie(const char *msg)
{
    printf("%s: %s\n", msg, SDL_GetError());
    SDL_Quit();
    exit(1);
}
void quit()
{
    SDL_GL_DeleteContext(maincontext);
    SDL_DestroyWindow(mainwindow);
    SDL_Quit();
}


void draw_scene()
{
    glClearColor ( 1.0, 1.0, 0.0, 1.0 );
    glEnableVertexAttribArray(0);
    glBindBuffer(GL_ARRAY_BUFFER, VBO);
    glVertexAttribPointer(0,3,GL_FLOAT,GL_FALSE,0,0);
    glDrawArrays(GL_TRIANGLES,0,3);
    SDL_GL_SwapWindow(mainwindow);
    glDisableVertexAttribArray(0);
    SDL_Delay(20);
}
GLuint load_and_compile_shader(char *filename)
{
    std::string line,total;
    std::ifstream shaderFile(filename);
    if(shaderFile.is_open())
    {
        while(shaderFile.good())
        {
            getline(shaderFile,line);
            total+=line;
        }
    }
}

void prepare()
{
    if (SDL_Init(SDL_INIT_VIDEO) < 0)
        sdldie("Unable to initialize SDL");
    SDL_GL_SetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION, 3);
    SDL_GL_SetAttribute(SDL_GL_CONTEXT_MINOR_VERSION, 3);
    SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 1);
    SDL_GL_SetAttribute(SDL_GL_DEPTH_SIZE, 24);
    mainwindow = SDL_CreateWindow("stop", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED,
        512, 512, SDL_WINDOW_OPENGL | SDL_WINDOW_SHOWN);
    if (!mainwindow)
        sdldie("Unable to create window");
    maincontext = SDL_GL_CreateContext(mainwindow);
    SDL_GL_SetSwapInterval(1);
    gl3wInit();
    glClear ( GL_COLOR_BUFFER_BIT || GL_DEPTH_BUFFER_BIT);
    glGenBuffers(1,&VBO);
    glBindBuffer(GL_ARRAY_BUFFER,VBO);
    glm::vec3 modelData[3];
    modelData[0] = glm::vec3(-0.5f,-0.5f,0.0f);
    modelData[1] = glm::vec3(0.5f,-0.5f,0.0f);
    modelData[2] = glm::vec3(0.0f,0.5f,0.0f);
    glBufferData(GL_ARRAY_BUFFER,sizeof(modelData),modelData,GL_STATIC_DRAW);
    GLuint myshader = glCreateProgram();

}

int main(int argc, char *argv[])
{
    prepare();
    SDL_Event event;
    bool cycle = true;
    while( cycle ) {
            SDL_PollEvent( &event );
            switch( event.type ) {
            case SDL_KEYDOWN:
                SDL_Quit();
                cycle = false;
                quit();
                break;
            default:
                draw_scene();
            }
        }
    return 0;
}
wingear ★★★★
() автор топика
Ответ на: комментарий от wingear
gcc -c -pipe -Wall -W -D_REENTRANT -DQT_NO_DEBUG -DQT_GUI_LIB -DQT_SHARED -O3 -I/usr/include -I/usr/lib64/gcc/x86_64-pc-linux-gnu/4.5.2/include/g++-v4/iostream  -o gl3w.o gl3w.c

Я бы попробовал это компилировать как c++.

r2d2
()
Ответ на: комментарий от wingear

Уверен, что makefile написан правильно?

undefined reference to `main'

намекает на то, что у тебя единица трансляции с функцией main не скомпилирована или скомпилированный объектник не входит в список объектников, передаваемых линкеру.

m0rph ★★★★★
()
Ответ на: комментарий от m0rph

Хотя конечно кусок выхлопа

g++ -Wl,-O3 -Wl,-rpath -o train main.o gl3w.o

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

m0rph ★★★★★
()
Ответ на: комментарий от r2d2

плюсую, автор, вы компилируете С++ программу при помощи сишного компилятора

frozenix ★★★
()
Ответ на: комментарий от wingear

Его написал qmake, потом я попытался поправить, видимо, неудачно

Если польуешься qmake, то не стоит изменять сгенерированный им makefile, он все равно будет перегенерирован.

m0rph ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.