2017-06-17 63 views
-5

所以我有這個工作,並且即將把它放在我的gitub上,當我意識到我忘了評論,所以我回去做了,我想我做錯了,因爲現在我我得到錯誤我不知道如何擺脫。我開始評論我的C++程序,然後得到錯誤

#include <iostream> 
#include <cstdlib> 
#include <string> 
using namespace std; 

class ENVIROMENT //Defines a class. 
    { 
    public: 
    string OS; //Difines a string. 
      { 
      if (char const* USER = std::getenv("USER")) //Checks for user  name on a Unix-like system. 
      { 
      OS = "Unix"; //If true (succeded), assigns "Unix" to the variable "SYS". 
      } 
      else if(char const* USER = std::getenv("USERNAME")) //If last check was false (failed), checks for the username on Windows. 
      { 
      OS = "Windows"; //If true (succeded), assigns "Windows" to the variable "SYS". 
      } 
      else 
      { 
      OS << "Your system is not supported!"; //If both returned false (failed), assignes a "System not supported" message to SYS. 
      } 
      cout << OS << endl; //Tells the user what system they have or that it is not supported (meaning it doesn't know what OS it is). 
      return OS; //Returns OS to the string "OS". 
      } 
    }; 

int main() 
    { 
    ENVIROMENT CHECK; //Calls the class "ENVIROMENT", refers to it as "CHECK". 
    CHECK.OS(); //Calls the function (string) "OS" from the class "ENVIROMENT". 
    return 0; //Returns a value of 0 if int "main" executed successfuly. 
    } 

錯誤:

ERROR: 10:11 Expected member name or ';' after declaration specifiers. 

ERROR: 31:4 Type string does not provide a call operator. 

我的問題是:什麼這些錯誤是什麼意思?我知道我必須錯過一些非常基本的東西。

編輯:它應該根據用戶名系統變量檢測正在運行的操作系統。返回unix系統上的「Unix」和Windows上的「Windows」。它純粹是教育性的,並不意味着被自己使用,但可以用於更完整的程序。

+0

我在回答中提供了一個工作解決方案。以下是與工作代碼的鏈接:http://ideone.com/fwbQVy。您需要將其與您的比較以查看差異。最好是擺脫所有評論來修復代碼本身。您可以稍後添加評論。 – Azeem

+1

@Josh:你應該避免在代碼中多餘的評論。儘量讓你的代碼可讀。像「OS =」Unix「這樣的一行; //如果爲真(成功),則將「Unix」分配給變量「SYS」。「不會給讀取器帶來任何東西,只會使代碼混亂。這會讓你的代碼更難讀。您的代碼非常易讀,不需要評論即可輕鬆完成。評論應限於解釋算法和/或關於輸入,錯誤條件等的特殊考慮的單個塊...通常稱爲「合同」。大多數功能根本不需要評論,但是文檔。 –

回答

1

有多個語法錯誤!

下面是你的代碼片段(沒有評論),它是類定義中的自由代碼。它應該在一些功能上。你不能這樣寫代碼。檢查實時代碼並與您的代碼進行比較。

// ... 
public: 
    string OS; 
    { 
     if (char const* USER = std::getenv("USER")) 
    { 
// ... 

這是你的代碼的功能版本:http://ideone.com/fwbQVy

重要 遵循縮進和評論的一貫作風。

花一些時間去穿過C++ Coding Guidelines

+0

oooooooo.k。那沒用。 IDE沒有給出任何錯誤,但gcc只是拋出了整個buch編輯:繼承人這不是ganna適合在這裏的鏈接。 https://github.com/Myersj281/Small-Projects-Cpp/wiki – Josh

+0

@Josh:什麼沒有工作? – Azeem

+0

你在代碼中究竟做了什麼?請用你的問題陳述更新你的問題。 – Azeem

0

這不是一個解決方案本身,我只是想表明@Josh如何使用一個(不爲不存在的)正確的編碼風格,壓痕,將使他的應用程序(與任何應用程序)非常可讀,並且評論最少。

#include <iostream> 
#include <cstdlib> 
#include <string> 

// This application tries to deduce the OS by probing from environment strings. 

class Environment 
{ 
public: 
    static std::string getOS() 
    { 
    // tries to get the OS by getting the username from the environment. 
    // returns the name of the OS, or an empty string on error. 

    if (std::getenv("USER")) 
    { 
     return "Unix"; 
    } 
    else if (std::getenv("USERNAME")) 
    { 
     return "Windows"; 
    } 
    return ""; 
    } 
}; 

int main() 
{ 
    std::string osName = Environment::getOS(); 

    if (osName.empty()) 
    { 
    std::cout << "Your system is not supported!\n"; 
    return 1; 
    } 

    std::cout << "Running under: " << osName << '\n'; 

    return 0; 
} 
相關問題