简单的C ++程序帮助编译

时间:2011-02-05 20:17:43

标签: c++ makefile compiler-errors

伙计我是初级程序员,需要帮助。我正在处理位于此处的任务的第A部分:http://cs.binghamton.edu/~sgreene/cs240-2010f/labs/lab2.html

但是我在编译程序时遇到了问题。请告诉我在makefile和cpp文件中我做错了什么!这是我的文件:

# CS240 Lab2 Makefile 

all: lab2

lab2: lab2.o
    g++ -Wall lab2.o -o lab2

lab2.o: main.cpp
    g++ -Wall -c main.cpp -o lab2.o

lab2.o: tenstrings.cpp
    g++ -Wall -c tenstrings.cpp -o lab2.o

/*tenstrings.h*/
#ifndef TENSTRNGS
#define TENSTRNGS

class TenStrings
{
public: 
    // Default Constructor
    TenStrings();
}
#endif

/* tenstrings.cpp */

#include "TenStrings.h"

//Default Constructor
TenStrings::TenStrings()
{}

/* main.cpp */

#include "TenStrings.h"

int main()
{
    TenStrings varTen;
    return 0; 
}

正如你所看到的,这甚至不是一个程序,它只是让我开始编译,但我得到了一堆错误:

________________________________________________________________________________________
Makefile:12: warning: overriding commands for target 'lab2.o'
Makefile:9: warning: ignoring old commands for target 'lab2.o'
g++ -Wall -c tenstrings.cpp -o lab2.o
In file included from tenstrings.cpp:6:
TenStrings.h:11:3: warning: no newline at end of file
tenstrings.cpp:7: error: new types may not be defined in a return type
tenstrings.cpp:7: error: return type specification for constructor invalid
_________________________________________________________________________________________

提前致谢!

6 个答案:

答案 0 :(得分:1)

我认为你的makefile应该更像这样:

all: lab2

lab2: main.o tenstrings.o
    g++ main.o tenstrings.o -o lab2

main.o: main.cpp
    g++ -Wall -c main.cpp -o main.o

tenstrings.o: tenstrings.cpp
    g++ -Wall -c tenstrings.cpp -o tenstrings.o

可能会解决你的前两个错误。

答案 1 :(得分:1)

在类声明结束时需要一个分号。此外,您可以更简单地重写您的Makefile;您不需要每个文件的目标:

all: lab2

lab2: lab2.o
    g++ -Wall lab2.o -o lab2

lab2.o: main.cpp tenstrings.cpp
    g++ -Wall -o lab2.o tenstrings.cpp main.cpp

答案 2 :(得分:1)

您不会使用';'终止TenStrings类在TenStrings.h的最后,这就是错误。

答案 3 :(得分:0)

你在课堂声明结尾处遗漏了一个分号。

答案 4 :(得分:0)

我认为你在课堂定义的最后忘记了一个分号。

/*tenstrings.h*/
#ifndef TENSTRNGS
#define TENSTRNGS

class TenStrings
{
public: 
    // Default Constructor
    TenStrings();
}; // <--- !!!!
#endif

答案 5 :(得分:0)

您定义了两次相同的make目标。然后,您不链接项目的所有部分。这应该是这样的:

all: lab2

lab2: lab.o lab2.o
    g++ -Wall lab.o lab2.o -o lab2

lab.o: main.cpp
    g++ -Wall -c main.cpp -o lab.o

lab2.o: tenstrings.cpp
    g++ -Wall -c tenstrings.cpp -o lab2.o