所以,這是一個愚蠢的錯誤,但我一直在黑客攻擊大約一個小時,似乎無法解決它。令人沮喪的C++編譯器錯誤,關於未定義的引用
我有一個類的main.cpp這是充滿隨機的GUI廢話(不是真的有關我的問題,我相信),但在我的方法之一,我做出一個又一個的我的班「TiffSpec」
參考TiffSpec是我寫的一個類,到目前爲止它沒有編譯錯誤。編譯錯誤我得到的是:
「未定義參考TiffSpec::TiffSpec(std::basic_string<char, std::char_traits<char>, std::allocator<char> >)
」
注:我不相信這是String類問題,我試着寫一個默認的構造函數和引用,而且仍然有沒有「std :: basic _...」東西的同樣的錯誤。
TiffSpec.h,TiffSpec.cpp和main.cpp都在同一個目錄下。
這裏是main.cpp中了代碼,直到錯誤:
#include <GL/glut.h>
#include <stdlib.h>
#include <stdio.h>
#include <string>
#include <string.h>
#include <iostream>
#include <sstream>
#include <fstream>
#include <ctype.h>
#include <vector>
#include <list>
#include <typeinfo>
#include <math.h>
#include "TiffSpec.h"
/* Create checkerboard image */
#define checkImageWidth 1024
#define checkImageHeight 1024
GLubyte checkImage[checkImageHeight][checkImageWidth][3];
static GLint height;
//list of all non-main methods
void init(void);
void display(void);
void reshape(int w, int h);
void motion(int x, int y);
void read_next_command(unsigned char key, int x, int y);
void makeCheckImage(void);
void main_loop(char line[]);
void evaluateLine(char line[], std::vector<char> delimiters);
void evaluateCommand(std::list<std::string> command);
void read(std::list<std::string> command);
void draw(std::list<std::string> command);
void color(std::list<std::string> command);
void move(std::list<std::string> command);
void TiffStat(std::string fileName);
std::string convertInputToFloating(std::string input);
std::string trimExtraZeros(std::string input);
std::vector<char> getDelimiters();
//end of list
void
TiffStat(std::string fileName)
{
TiffSpec * testing = new TiffSpec(fileName);
}
下面是代碼的TiffSpec.h開頭:
#include <GL/glut.h>
#include <stdlib.h>
#include <stdio.h>
#include <string>
#include <string.h>
#include <iostream>
#include <sstream>
#include <fstream>
#include <ctype.h>
#include <vector>
#include <list>
#include <typeinfo>
#include <math.h>
#include <exception>
#ifndef TIFFSPEC_H_
#define TIFFSPEC_H_
using namespace std;
class TiffSpec {
public:
TiffSpec();
TiffSpec(std::string filename);
和良好的措施,這裏是一些來自TiffSpec.cpp的代碼
#include "TiffSpec.h"
#include <algorithm>
bool isLittleEndian();
void ByteSwap_(unsigned char * b, int n);
bool tagRecognized(unsigned short tag);
bool fieldTypeRecognized(unsigned short fieldType);
void gatherValues(IFDEntry & entry, ifstream &fileStream);
valueTypes retrieveCorrectType(unsigned short fieldType, unsigned long numberOfValues);
int getFieldByteSize(short fieldType);
TiffSpec::TiffSpec()
{}
TiffSpec::TiffSpec(std::string fileName)
{
std::ifstream fileStream;
任何想法我的問題可能是什麼?另外,是否有更有效的方式來表示編碼塊,而不是在每行之前寫入4個空格?看在參考指南,並沒有看到任何東西...
好吧,我想我有一個錯誤的想法。我第一次使用eclipse(至少在C++中),並且在某些方面被MSVS所寵愛。其中一種方式是make文件。我認爲這個問題是我的makefile。
makefile提供給我。我想我需要參考這些新課程,但是在哪裏?我是否需要爲.h和.cpp文件執行此操作?
生成文件:
SHELL = /bin/sh
prefix = /usr
CC = gcc
C++ = g++
GLUT_LIBS = $(prefix)/lib/libglut.so.3
X_LIBADD = -lXmu -lXext -lXi -lX11
INCLUDES = -Iinclude -I$(prefix)/include
LDADD = $(GLUT_LIBS) $(prefix)/lib/libGLU.so.1 $(prefix)/lib/libGL.so.1 -lm
CFLAGS = -g -O2 -Wall -fomit-frame-pointer -ffast-math -fexpensive-optimizations-D_REENTRANT
COMPILE = $(CC) $(DEFS) $(INCLUDES) $(CPPFLAGS) $(CFLAGS)
LINK = $(CC) $(CFLAGS) $(LDFLAGS) -o [email protected]
.SUFFIXES:
.SUFFIXES: .cpp .c .o
.c.o:
$(COMPILE) -c $<
.cpp.o:
$(C++) $(DEFS) $(INCLUDES) $(CPPFLAGS) $(CFLAGS) -c $<
all: main
CLI_OBJECTS=main.o
main: $(CLI_OBJECTS)
$(LINK) $(CLI_OBJECTS) $(LDADD) $(LIBS)
clean:
-rm -f *.o $(PROGRAMS)
我相信它有事情做,只有main.o在那裏。但我確實需要寫出來糾正它,但我不知道。
爲了在StackOverflow中漂亮地打印源代碼,您照常編寫代碼,或者更好地使用從您最喜愛的編輯器複製和粘貼,完成後選擇整個塊並按下Ctrl + K。對於其他快捷方式,只需將鼠標懸停在textarea的按鈕上即可。 – Ismael 2009-02-15 01:23:38
@xhantt,你在說什麼?代碼/通過格式化程序運行。 – strager 2009-02-15 01:24:55
在SO編輯器中有一個1和0的按鈕,它會將高亮區塊格式化爲代碼(即縮進4個空格)。 – 2009-02-15 01:30:25