Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/146.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 获取矮人错误版本';4';_C++ - Fatal编程技术网

C++ 获取矮人错误版本';4';

C++ 获取矮人错误版本';4';,c++,C++,我在学校的项目上遇到了一些麻烦。我认为这可能是我使用指针时的一个错误,但我不确定为什么会出现这个错误。这段代码是不完整的,但我正在尝试一路测试它。你知道我为什么会犯这个错误吗?这是什么意思?谢谢 来自Cygwin终端的错误 -bash-3.2$ make clean rm -rf *.o simulate -bash-3.2$ make simulate g++ -c -g Main.cpp g++ -c -g Maze.cpp g++ Main.o Maze.o -o simulate /us

我在学校的项目上遇到了一些麻烦。我认为这可能是我使用指针时的一个错误,但我不确定为什么会出现这个错误。这段代码是不完整的,但我正在尝试一路测试它。你知道我为什么会犯这个错误吗?这是什么意思?谢谢

来自Cygwin终端的错误

-bash-3.2$ make clean
rm -rf *.o simulate
-bash-3.2$ make simulate
g++ -c -g Main.cpp
g++ -c -g Maze.cpp
g++ Main.o Maze.o -o simulate
/usr/bin/ld: Dwarf Error: found dwarf version '4', this reader only handles version 2 information.
Maze.o: In function `Maze::createMaze(char*)':
Maze.cpp:(.text+0x49): undefined reference to `Node::Node(char)'
collect2: error: ld returned 1 exit status
make: *** [simulate] Error 1
Main.cpp

#include <iostream>
#include <fstream>
#include <string>
#include "Maze.h"
using namespace std;

int main()
{
    int array_size = 1024;
    char * mazeArray = new char[array_size];
    int position = 0;
    string mazeName;
    Maze Maze1;

    cout << "Enter the name of the maze file: ";
    getline(cin, mazeName);

    ifstream fin(mazeName.c_str());
    //File opened successfully
    if(fin.is_open())
    {
        while(!fin.eof() && position < array_size)
        {
            fin.get(mazeArray[position]); //reading one character from file to mazeArray
            position++;
        }
        mazeArray[position-1] = '\0'; //placing character mazeArray terminating character

        for(int i = 0; mazeArray[i] != '\0'; i++){
            if(isspace(mazeArray[i]))
                mazeArray[i] = mazeArray[i+1];
        }

        cout << "Displaying mazeArray..." << endl << endl;
        //this loop display all the charaters in mazeArray till \0 
        for(int i = 0; mazeArray[i] != '\0'; i++)
        {
            cout << mazeArray[i];
        }
        cout << endl;

        Maze1.createMaze(mazeArray);

    }
    else //file could not be opened
    {
        cout << "File could not be opened." << endl;
    }

    return 0;
}

问题不在代码本身

一个问题是链接命令失败,因为您没有链接所有对象文件。您需要链接
Main.o
Maze.o
Node.o
来创建可执行文件:

g++ Main.o Maze.o Node.o -o simulate
另一个问题是编译器比链接器更新。编译器正在使用Dwarf版本4生成调试信息,但您的链接器(
/usr/bin/ld
)只理解Dwarf版本2

/usr/bin/ld: Dwarf Error: found dwarf version '4', this reader only handles
version 2 information.
您需要将链接器更新到与正在使用的编译器兼容的新版本

或者,正如a中所建议的,您可以在编译行和链接行中使用
-gdwarf-2
。在
生成文件中

CFLAGS = -c -gdwarf-2

FILES.cpp = Main.cpp Maze.cpp Node.cpp
FILES.o   = $(FILES.cpp:.cpp=.o}

simulate: $(FILES.o)
    $(CC) $(CFLAGS) $(FILES.o) -o $@
(在
makefile
中,命令行中应该有一些不是宏调用的部分;这样您就可以更轻松地更改所有内容。)


您需要删除Dwarf-4对象文件并重新编译以避免出现错误/警告。

一个问题是您没有将
Node.cpp
添加到makefile中
Main.cpp
Maze.cpp
生成但不生成
Node.cpp
。或者,在OP使用的GCC系列编译器中,-gdwarf-2可以在不想更新ld的情况下工作。@janneb:Oh-有趣。谢谢
#include <iostream>
#include <string>
#include <vector>

#include "Node.h"
using namespace std;

Node::Node(char name) : name(name) {

} 

void Node::setNodeName(char tempName){
    name = tempName;
}

void Node::attachNewNode(Node temp, int direction){
    attachedNodes[direction] = temp;
}

Node Node::getAttachedNode(int direction){
    return attachedNodes[direction];
}
#!/bin/bash
#file:makefile
CC = g++
CFLAGS = -c -g

simulate: Main.o Maze.o
    $(CC) Main.o Maze.o -o simulate

Main.o: Main.cpp Maze.h
    $(CC) $(CFLAGS) Main.cpp

Maze.o: Maze.cpp Menu.h Node.h
    $(CC) $(CFLAGS) Maze.cpp
Node.o: Node.cpp Node.h
    $(CC) $(CFLAGS) Node.cpp

clean:
    rm -rf *.o simulate
g++ Main.o Maze.o Node.o -o simulate
/usr/bin/ld: Dwarf Error: found dwarf version '4', this reader only handles
version 2 information.
CFLAGS = -c -gdwarf-2

FILES.cpp = Main.cpp Maze.cpp Node.cpp
FILES.o   = $(FILES.cpp:.cpp=.o}

simulate: $(FILES.o)
    $(CC) $(CFLAGS) $(FILES.o) -o $@