2011-01-31 20 views
1

我想學C++,所以我寫了在Windows中一個無限循環的程序,要求用戶輸入的兩個整數並讀出這些數字是否正弦和正切值或者不是第一個整數是第二個整數的倍數。無法打開輸出文件:建立在C++

Program1Math.h

#ifndef PROGRAM1MATH_H_ 
#define PROGRAM1MATH_H_ 
class Program1Math { 
public: 
    Program1Math(int, int); 
    void calculateSine(int); 
    void calculateTangent(int); 
    void calculateModulus(); 
}; 
#endif 

Program1Math.cpp

#include "Program1Math.h" 
#include <iostream> 
#include <math.h> 
using namespace std; 
int c; 
int d; 
Program1Math::Program1Math(int a, int b) 
{ 
    c=a; 
    d=b; 
} 
void Program1Math::calculateSine(int a) 
{ 
    cout<<"\nSine("<< a <<")\t=\t"<< sin(a); 
} 
void Program1Math::calculateTangent(int a) 
{ 
    cout<<"\nTan("<< a <<")\t=\t"<< tan(a); 
} 
void Program1Math::calculateModulus() 
{ 
    if (c%d==0) 
    { 
    cout<<"\n"<< c <<" is a multiple of "<< d <<"!"; 
    } 
    else 
    { 
    cout<<"\n"<< c <<" is not a multiple of "<< d <<"."; 
    } 
} 

Program1.cpp

#include <iostream> 
#include "Program1Math.h" 
using namespace std; 
int main() 
{ 
    int num1; 
    int num2; 
    int i=1; 

    while (i>0){ 
    cout<<"Please enter the first integer number:\n"; 
    cin>>num1; 
    cout<<"Please enter the second integer number:\n"; 
    cin>>num2; 
    Program1Math p(num1, num2); 
    p.calculateModulus(); 
    p.calculateSine(num1); 
    p.calculateTangent(num1); 
    p.calculateSine(num2); 
    p.calculateTangent(num2); 
    cout<<"\n\n"; 
    } 
    return 0; 
} 

該計劃將建立和格式問題的calculateTangent正常運行(除函數)在Eclipse中。但是,我無法讓程序在Unix環境下運行。該程序將生成,但是當我嘗試運行它時,我收到此錯誤消息:

Program1Math: In function `_start': 
(.text+0x0): multiple definition of `_start' 
/usr/lib/gcc/x86_64-redhat-linux/4.1.2/../../../../lib64/crt1.o:(.text+0x0): first defined here 
Program1Math: In function `_fini': 
(.fini+0x0): multiple definition of `_fini' 
/usr/lib/gcc/x86_64-redhat-linux/4.1.2/../../../../lib64/crti.o:(.fini+0x0): first defined here 
Program1Math:(.rodata+0x0): multiple definition of `_IO_stdin_used' 
/usr/lib/gcc/x86_64-redhat-linux/4.1.2/../../../../lib64/crt1.o:(.rodata.cst4+0x0): first defined here 
Program1Math: In function `__data_start': 
(.data+0x0): multiple definition of `__data_start' 
/usr/lib/gcc/x86_64-redhat-linux/4.1.2/../../../../lib64/crt1.o:(.data+0x0): first defined here 
Program1Math:(.rodata+0x8): multiple definition of `__dso_handle' 
/usr/lib/gcc/x86_64-redhat-linux/4.1.2/crtbegin.o:(.rodata+0x0): first defined here 
Program1Math: In function `_init': 
(.init+0x0): multiple definition of `_init' 
/usr/lib/gcc/x86_64-redhat-linux/4.1.2/../../../../lib64/crti.o:(.init+0x0): first defined here 
/usr/lib/gcc/x86_64-redhat-linux/4.1.2/crtend.o:(.dtors+0x0): multiple definition of `__DTOR_END__' 
Program1Math:(.dtors+0x8): first defined here 
collect2: ld returned 1 exit status 

有沒有人知道這個問題可能是什麼?

+0

使用`{}`按鈕(或縮進每行4個空格)格式化代碼。不要使用報價功能。 – 2011-01-31 23:38:45

回答

1

必須有與您的構建設置有問題。首先,我想移動的變量Çd到您的Program1Math.h文件。

Program1Math.h

#ifndef PROGRAM1MATH_H_ 
#define PROGRAM1MATH_H_ 

class Program1Math { 
    private: 
    int c; 
    int d; 

    public: 
    Program1Math(int, int); 
    void calculateSine(int); 
    void calculateTangent(int); 
    void calculateModulus(); 
}; 
#endif 

然後創建一個名爲的Makefile文件,並添加以下代碼行:

的Makefile

all: 
    g++ program1.cpp Program1Math.cpp -o Program1 -Wall 

保存Makefile文件在同一目錄下其他文件。 現在,您可以生成並運行此方法:

> make 
> ./Program1