Home Php C# Sql C C++ Javascript Python Java Go Android Git Linux Asp.net Django .net Node.js Ios Xcode Cocoa Iphone Mysql Tomcat Mongodb Bash Objective-c Scala Visual-studio Apache Elasticsearch Jar Eclipse Jquery Ruby-on-rails Ruby Rubygems Android-studio Spring Lua Sqlite Emacs Ubuntu Perl Docker Swift Amazon-web-services Svn Html Ajax Xml Java-ee Maven Intellij-idea Rvm Macos Unix Css Ipad Postgresql Css3 Json Windows-server Vue.js Typescript Oracle Hibernate Internet-explorer Github Tensorflow Laravel Symfony Redis Html5 Google-app-engine Nginx Firefox Sqlalchemy Lucene Erlang Flask Vim Solr Webview Facebook Zend-framework Virtualenv Nosql Ide Twitter Safari Flutter Bundle Phonegap Centos Sphinx Actionscript Tornado Register | Login | Edit Tags | New Questions | 繁体 | 简体


10 questions online user: 5

0
votes
answers
46 views
+10

EigenvalueDecomposition返回錯誤的特徵向量

1

我使用apache.commons.math3庫來計算一個3x3矩陣的特徵向量,但對於計算特徵向量的特徵分解方法將返回錯誤的結果:這是我的代碼:EigenvalueDecomposition返回錯誤的特徵向量

double[][] matrix = { 
      {1 ,3 ,2}, 
      {1 ,4 ,3}, 
      {2 ,1 ,0} 
    }; 

    RealMatrix realMatrix = MatrixUtils.createRealMatrix(matrix); 
    EigenDecomposition decomposition = new EigenDecomposition(realMatrix); 

    for(int i = 0; i<3; i++){ 
     RealVector eigenvector = decomposition.getEigenvector(i); 
     System.out.println(eigenvector.getEntry(0)+" "+eigenvector.getEntry(1)+" "+eigenvector.getEntry(2)); 
    } 

印刷結果是:

-0.5760517243311052 -0.7536997812678066 -0.31638750072027233 
0.22370947445236325 -0.6030287282098593 0.770086088626364 
0.293925829450875 1.583437114738283 -2.642858652367182 

而正確的人應該是

0.29050, -0.78307, 1 
1.82072, 2.38220, 1 

問題是什麼?這是精確錯誤嗎?在我看來,不可能出現這樣的錯誤結果

沙发
0
2

如果v是矩陣的特徵向量,那麼v的非零實數倍也是特徵向量。矢量

(-0.5760517243311052 -0.7536997812678066 -0.31638750072027233) 

(1.82072, 2.38220, 1). 

的倍數的差別就是這樣的第一個具有範數1,而第二個具有第三組分1.你的庫似乎選擇由範數歸一化1,這是更好的,因爲它總是可能的。

0
votes
answers
34 views
+10

main()應該在C和C ++中返回什麼?

main()在C和C ++中定義函數的正確(最有效)方法是什麼- int main()或void main()- 為什麼?如果int main()那麼return 1或return 0? 這個問題有很多重複,包括: C main()函數的有效簽名是什麼? 返回類型的main()函數 區別void main()和int main()? main()在C ++中的簽名 什麼是適當的聲明main()? - 對於C ++,確實有一個非常好的答案。 main()C語言中的函數樣式 返回main()C中的方法類型 int main()vs void main()在C中 有關: C ++ - int main(int argc, char **argv) C ++ - int main(int argc, char *argv[]) 是char *envp[]為第三個參數main()便攜式? 該int main()函數必須在所有編譯器中返回一個值嗎? 為什麼main()C和C ++ 中的函數類型留給用戶定義? 為什麼int main(){}編譯? main()在C ++ 14中的法律定義?
0
votes
answers
50 views
+10

如何從PHP中的JAR捕獲返回值並顯示它

1

我有以下JAVA程序已被轉換爲JAR文件並放在與我的PHP文件相同的目錄中。 所以基本上它需要通過PHP傳遞參數,並顯示如何從PHP中的JAR捕獲返回值並顯示它

public class Test { 
    public static void main(String[] args) throws Exception { 
     //Takes the value passed from the PHP 
     String Name = (new String(args[0])).toString(); 
     //This will be treated as Output Parameter which will be returned to PHP 
     System.out.println("Return to PHP"); 

    } 
} 

下面是我的PHP代碼將執行JAR文件和所需的1個參數傳遞給JAR。

<?php 

$arg1 = "My_INPUT_PARAMETER"; 

shell_exec("java -jar TEST.jar $arg1"); 
echo "Done"; 

?> 

我在某處讀到Sysout(System.out.println)中放置的任何內容都將被視爲輸出參數或PHP返回值。 所以在我的情況下,它將是字符串「返回到PHP」。

但我無法獲得PHP的價值並顯示它。

我試着在exec語句中放置一個輸出值,但它不起作用。 我嘗試了下面的代碼,但它拋出我的錯誤。

<?php 

$arg1 = "My_INPUT_PARAMETER"; 
$output = ''; 

shell_exec("java -jar TEST.jar $arg1", $output); 
echo "Done"; 
echo $output; 

?> 

誰能幫助我在這裏,我怎樣才能從PHP得到PHP或輸出參數返回值,並顯示它或我的PHP中使用它,並繼續與其他執行部分。

+0

看看藝術第一個例子在文檔http://php.net/manual/en/function.shell-exec.php。 '$ output = shell_exec(「java -jar TEST.jar $ arg1」);' –

+0

@RolandStarke感謝隊友,它的工作文件。這適用於單個返回值但是,如果JAR文件返回多個值,那我該如何使用它呢? –

沙发
0
0

謝謝@Roland Starke。

所以基本上我們可以用2條語句從PHP運行JAR文件: EXEC和SHELL_EXEC。

EXEC將保存來自JAR文件的所有返回值,我們可以使用它作爲數組並顯示所需的輸出參數。

SHELL_EXEC將保存所有的輸出參數,它將一次顯示全部。

<?php 

$arg1 = "Multi Return"; 

exec("java -jar TEST.jar $arg1",$output); 

echo $output[0]."<br/>"; 

echo $output[1]; 

echo "-------------------------------"; 

$shell_out = shell_exec("java -jar TEST.jar $arg1"); 

echo $shell_out; 

?> 
0
votes
answers
40 views
+10

的Python:嘗試,除了ValueError異常只能使用一次

0

我有一個分配做出華氏Clesius計算器和使用嘗試,除了ValueError功能,但我不能輸入錯誤的值超過一次或崩潰。我希望用戶輸入一個數字而不是字母。這是我的代碼現在的樣子的Python:嘗試,除了ValueError異常只能使用一次

print("Hej och välkommen till Fahrenheit omvandlaren") 
Fahrenheit = (input("Vänligen ange grader i Fahrenheit: ")) 

try: 
    test = float(Fahrenheit) 

except ValueError: 
    Fahrenheit = (input("Vänligen ange ett tal!")) 

Celsius = (float(Fahrenheit)-32)*5/9 
print(Fahrenheit, "Fahernheit är lika med",(round(Celsius,2)),"grader Celsius") 

我在通用新的節目,並希望如果你能以簡單的方式解釋如何使人們有可能多次輸入的字符串,而無需在程序崩潰

+0

儘量避免把代碼中的'except'塊,能夠產生異常。 –

沙发
0
1

你可以可以把輸入在一個循環:

while True: 
    fahrenheit = (input("Vänligen ange grader i Fahrenheit: ")) 
    try: 
     test = float(fahrenheit) 
     break 
    except ValueError: 
     pass 
板凳
0
0

你除了條款要求從用戶的輸入。但第二個輸入未經測試。 因此,當第二個輸入用於float函數時,如果輸入不正確,它將失敗。

如果你希望用戶繼續給輸入,直到他輸入一個數字,你需要一個循環。 在該循環中,您需要一個try-except子句(或其他一些測試)來測試輸入是否是數字。

0
votes
answers
38 views
+10

通過提交得分

0

我正在製作一個網站頁面,這是一個調查的種類。我有一節主要工作,但我不能得到下半場。我使用了與第一部分相同的代碼並進行了擴展。儘管如此,我還是無法使用它。我不明白爲什麼當我點擊提交時不會寫分數。當我按下提交時,它應該寫下「這是答案」,並且應該從問題的值中計算點的數量,例如,如果他們按下每個問題的第一個單選按鈕,它應該打印出2. 2.通過提交得分

這是我使用的基本JavaScript,以防它有所幫助。

function answer(total) { 
var score = 0; 
if (document.getElementById('exp_no').checked) { 
score++; 
} 
if (document.getElementById('chg_no').checked) { 
score++; 
} 
if (document.getElementById('sus_no').checked) { 
score++; 
} 
document.getElementById('totalScore').innerHTML = score; 

} 

這是我正在使用的JavaScript。

function answer2(total) { 
var score2 = 0; 
if (document.getElementById('arr_1').checked) { 
score2++; 
} 
else if (document.getElementById('arr_2').checked) { 
score2 + 2; 
} 
else if (document.getElementById('arr_3').checked) { 
score2 + 3; 
} 
else if (document.getElementById('arr_4').checked) { 
score2 + 4; 
} 
else (document.getElementById('arr_5').checked) { 
score2 + 5; 
} 

if (document.getElementById('been1').checked) { 
score2++; 
} 
else if (document.getElementById('been2').checked) { 
score2 + 2; 
} 
else if (document.getElementById('been3').checked) { 
score2 + 3; 
} 
else if (document.getElementById('been4').checked) { 
score2 + 4; 
} 
else if (document.getElementById('been5').checked) { 
score2 + 5; 
} 
if (score2 == 2) { 
document.getElementById('finalScore').innerHTML = score2; 
} else if (score2 == 4){ 
document.getElementById('finalScore').innerHTML = score2; 
} else if (score2 == 4){ 
document.getElementById('finalScore').innerHTML = score2; 
} else if (score2 == 6){ 
document.getElementById('finalScore').innerHTML = score2; 
} else if (score2 == 8){ 
document.getElementById('finalScore').innerHTML = score2; 
} else if (score2 == 10){ 
document.getElementById('finalScore').innerHTML = score2; 
} 
} 

這是我的HTML

<button onclick = "toggletab()" id="tabButton"><h3>first results</h3> 
</button> 
     <form> 
     <div id="first" > 
     <fieldset> 
       <label> 
       <legend>Is your arrest record a:</legend> 
        <input id="arr_1" type="radio" name="field4" value="1" 
onclick="getscores4(this)"/> 
        IC 35-38-9-1 
       </label> 
       <label> 
        <input id="arr_2" type="radio" name="field4" value="2" 
onclick="getscores4(this)"/> 
        IC 35-38-9-2 
       </label> 
       <label> 
        <input id="arr_3" type="radio" name="field4" value="3" 
onclick="getscores4(this)"/> 
        IC 35-38-9-3 
       </label> 
       <label> 
        <input id="arr_4" type="radio" name="field4" value="4" 
onclick="getscores4(this)"/> 
        IC 35-38-9-4 
       </label> 
       <label> 
        <input id="arr_5" type="radio" name="field4" value="5" 
onclick="getscores4(this)"/> 
        IC 35-38-9-5 
       </label> 
      </fieldset> 


      <fieldset> 
      <label> 
       <legend>Has it been:</legend> 
        <input id="been1" type="radio" name="field5" value="1" 
onclick="getscores5(this)"/> 
       1 Year From Date of Arrestor earlier if the Prosecutor 
agrees 
       </label> 
       <label> 
        <input id="been2" type="radio" name="field5" value="2" 
onclick="getscores5(this)"/> 
        5 Years From Date of Arrestor earlier if the Prosecutor 
agrees 
       </label> 
       <label> 
        <input id="been3" type="radio" name="field5" value="3" 
onclick="getscores5(this)"/> 
        8 YearsFrom Date of Arrestor earlier if the Prosecutor 
agrees 
       </label> 
       <label> 
        <input id="been4" type="radio" name="field5" value="4" 
onclick="getscores5(this)"/> 
        8/3 Years The Later of 8 Years from Date of Conviction 
or 3 years from completion of the sentence or earlier if the Prosecutor 
agrees 
       </label> 
       <label> 
        <input id="been5" type="radio" name="field5" value="5" 
onclick="getscores5(this)"/> 
        10/5 Years The Later of 10 Years from Date of 
Conviction or 5 years from completion of the sentence or earlier if the 
Prosecutor agrees 
       </label> 
      </fieldset> 
     </div> 
     <fieldset id="submitbutton" class="article"> 
<input type="button" id="submit" value="submit" onclick='answer2()' /> 
<p id="finalScore">this is answer </p> 
</fieldset> 
     </form> 
     </div> 
     </div> 

     <script src="backtest.js"></script> 
     <script src="backtest2.js"></script> 
     <script src="toggle.js"></script> 
+0

這段代碼有很多問題。你究竟想幹什麼? – brk

+0

我需要添加問題的值。我打算有5個不同的結果,取決於最終值是否等於2,4,6,8或10.這應該顯示結果#取決於最終值等於多少個數。因此,如果選擇了arr_1和been1,最終值應爲2並顯示結果1。 –

沙发
0
0

在功能ANSWER2(總數)已宣佈名爲「score2」變量,但在所有你的邏輯,你正在使用名爲「分數」變量。將分數更改爲分數2,然後它將起作用。而且我也認爲answer2()函數中不需要「全部」參數,因爲您沒有在任何地方使用它。

0
votes
answers
48 views
+10

角4動態表單 - 如果未觸及空值 - 如何獲得這些顯示的默認值?

1

使用Angular 4.x我創建了動態表單。 (它允許根據情況添加或刪除字段。) 一開始就一切都很好。所有值(開始,結束,類別)都有一個在模板中設置的初始值。在視覺上,一切看起來都很完美如果根據頁面上的其他對象或與頁面上的其他對象同步正確猜測值,則用戶無需更改任何內容。角4動態表單 - 如果未觸及空值 - 如何獲得這些顯示的默認值?

問題:如果用戶沒有更改這些值,它們將從窗體返回爲「」。儘管在頁面上展示了不錯的內容。 已經玩過很多原始/骯髒和感動的旗幟。沒有改變。

最後,我找到了開始和結束值的解決方法。不是很漂亮。只需在typescript中進行相同的日期轉換,並將formbuilder中的開始和結束值設置爲完全相同的東西。以爲我可以從模板中刪除value =來減少重複的代碼。但是,如果我這樣做,輸入字段在頁面上保持空白。

但是,此解決方法無法用於category_id事件,該事件可以在頁面上實時更改。更好的是,categoriesService.selectedCategory可以是none。我們會對categoriesService.selectedCategory.id字段感興趣。

頁面上的視覺事物完成,看起來不錯。但是如何在提交時從頁面獲取這些值? (即使用戶沒有與價值觀玩)

這是我的模板看起來像:

<form [formGroup]="myNewCustForm" novalidate (ngSubmit)="save(myNewCustForm)"> 
... 
<label>product</label> 
<select class="form-control" formControlName="category_id"> 
    <option 
    *ngFor="let category of categoriesService.categories" 
    [ngValue]="category.id" 
    [selected]="categoriesService.selectedCategory ? category.id === categoriesService.selectedCategory.id : false"> 
     {{category.name}} 
    </option> 
</select> 
... 
<label>start</label> 
<div class="input-group"> 
    <input 
    class="form-control" 
    placeholder="yyyy-mm-dd" 
    name="dprestart" 
    ngbDatepicker 
    #dpstart="ngbDatepicker" 
    value="{{startDate | date: 'yyyy-MM-dd'}}" 
    formControlName="start"/> 
    <button 
    class="input-group-addon" 
    (click)="dpstart.toggle()" 
    type="button"> 
    <i class="fa fa-calendar" aria-hidden="true"></i> 
    </button> 
</div> 

打字稿(角4.x版):

return this.formBuilder.group({ 
    start: this.startDateString, 
    end: this.endDateString, 
    category_id: '' 
}); 

而在保存方法:有關的startDate和結束日期

this.presences.value.forEach(presence => { 
    ... 
    console.log(presence.start); 
    console.log(presence.category_id); 
    ... 
} 

更多信息:

// presence default values - declarations 
startDate: Date; 
startDateString: string; 
endDate: Date; 
endDateString: string; 

,然後在呼籲ngInit方法:

this.endDate = new Date(Date.now()); 
this.endDate.setHours(0, 0, 0); 
if(this.endDate.getDay() > 4) { 
    this.endDate.setDate(this.endDate.getDate()+13-(this.endDate.getDay() || 7)); 
} else { 
    this.endDate.setDate(this.endDate.getDate()+6-(this.endDate.getDay() || 7)); 
} 
this.startDate = new Date(Date.now()); 
this.startDateString = this.datePipe.transform(this.startDate, 'yyyy-MM-dd'); 
this.endDateString = this.datePipe.transform(this.endDate, 'yyyy-MM-dd'); 
+0

剛剛發現了另一個解決方法。現在只要檢查結果是否返回「」。如果是這樣,我會嘗試重新計算默認值可能是什麼。有沒有乾淨的方式? – user3387542

+0

此替代方法也不起作用。 – user3387542

+0

這是否有一個笨蛋? –

沙发
0
1

與活性形式,像valuedisabledselected不起作用。你需要做的是利用表單控件,並做他們想做的事情。此外,與ngbDatepicker,它想要的價值,應該是NgbDateStruct類型,看起來像:

{ 
    "year": 2017, 
    "month": 11, 
    "day": 22 
} 
與日期選取器

所以,你需要的日期格式,以便日期選擇接受它,這裏有一個如何一個簡單的示例它應該看起來像:

startDateString: NgbDateStruct = {year: new Date().getFullYear(), 
            month: new Date().getMonth() + 1, 
            day: new Date().getDate()}; 

然後,您將分配給表單控件,就像你有。

對於select,如上所述,Angular完全不關心selected。什麼,你需要做的是與你的服務越來越每當它改變了值使用patchValue(或setValue):

this.myNewCustForm.controls.category_id.setValue('some value') 

看來你是使用服務此值。然後可以使用settergetter來達到此目的將值設置爲表單控件。

0
votes
answers
37 views
+10

爲什麼我無法在我的javascript代碼中獲得輸入值

0

我無法獲取所選Id的值。爲什麼我無法在我的javascript代碼中獲得輸入值

這裏的HTML和JavaScript

<!DOCTYPE html> 
 
<html> 
 

 
<head> 
 
    <meta charset="utf-8"> 
 
    <title></title> 
 
</head> 
 

 
<body> 
 

 
    <input id="input"> 
 
    <button id="button" type="button" name="button">Search</button> 
 

 
    <script> 
 
    const der = document.getElementById('input').value; 
 

 
    document.getElementById('button').addEventListener('click', 
 
     function() { 
 
     alert(der); 
 
     }); 
 
    </script> 
 

 
</body> 
 

 
</html>

我測試的鉻,歌劇和Firefox。沒有用。我也使用var而不是const,那也不工作。

我想獲得所選Id的輸入值。我真的看不到代碼中的任何問題

+2

您的'輸入'字段仍然**空**在您的JavaScript執行時。因此,'der'是一個空字符串。嘗試在**您的點擊監聽器函數中評估'document.getElementById('input')。value' ** – ccjmne

+0

因爲代碼運行時未定義該值。您需要選取函數中的值。 – Andy

+0

這裏是一個工作示例:https://jsfiddle.net/xossdv62/ – Sergej

沙发
0
0

您需要分配移動到der到單擊處理程序。目前,der正在加載頁面時進行評估,而不是單擊按鈕時。

document.getElementById('button').addEventListener('click', 
    function(){ 
    const der = document.getElementById('input').value; 
    alert(der); 
    }); 
+0

哦,我的..這是我的問題,我現在得到它。謝謝先生 –

板凳
0
1
const der = document.getElementById('input').value; 

這是你的問題。 在寫入任何內容之前,您將獲得輸入字段的值。 試着做這樣的:

document.getElementById('button').addEventListener('click', 
     function() { 
     const der = document.getElementById('input').value; 
     alert(der); 
     }); 
地板
0
0

der在代碼第一次運行時設置,並給出空值。點擊按鈕時重置它。

<!DOCTYPE html> 
 
<html> 
 

 
<head> 
 
    <meta charset="utf-8"> 
 
    <title></title> 
 
</head> 
 

 
<body> 
 

 
    <input id="input"> 
 
    <button id="button" type="button" name="button">Search</button> 
 

 
    <script> 
 
    
 

 
    document.getElementById('button').addEventListener('click', 
 
     function() { 
 
     const der = document.getElementById('input').value; 
 
     alert(der); 
 
     }); 
 
    </script> 
 

 
</body> 
 

 
</html>

4楼
0
0

你的問題是,你的代碼立即運行在頁面加載。由於它在頁面加載時爲空,變量爲空(您可以通過在控制檯中輸入der來驗證該變量,它不是錯誤,而不是值)。

您可以通過將變量賦值信息移到該函數來修復它,以便檢查何時準備就緒。

5楼
0
0

你的腳本不起作用,因爲你在之前從輸入字段得到的值被填寫,然後在點擊按鈕時而不是當前值時提醒該值。

解決的辦法是,當你點擊按鈕來移動得到值到被調用的回調函數行:

<!DOCTYPE html> 
 
<html> 
 

 
<head> 
 
    <meta charset="utf-8"> 
 
    <title></title> 
 
</head> 
 

 
<body> 
 

 
    <input id="input"> 
 
    <button id="button" type="button" name="button">Search</button> 
 

 
    <script> 
 
    document.getElementById('button').addEventListener('click', 
 
     function() { 
 
     const der = document.getElementById('input').value; 
 
     alert(der); 
 
     }); 
 
    </script> 
 

 
</body> 
 

 
</html>

6楼
0
0

試試這個代碼

<!DOCTYPE html> 
 
<html> 
 

 
<head> 
 
    <meta charset="utf-8"> 
 
    <title></title> 
 
</head> 
 

 
<body> 
 

 
    <input id="input" type="text"> 
 
    <button id="button" type="button" name="button">Search</button> 
 

 
    <script> 
 
    document.getElementById('button').addEventListener('click', 
 
     function() { 
 
     alert(document.getElementById('input').value); 
 
     }); 
 
    </script> 
 

 
</body> 
 

 
</html>

7楼
0
0

在與表單輸入發生任何交互之前,您的代碼在腳本執行後立即存儲輸入的值。一種解決方案可能是在您的const der中存儲對輸入的引用,然後在您的點擊事件中調用der.value

<!DOCTYPE html> 
 
<html> 
 

 
<head> 
 
    <meta charset="utf-8"> 
 
    <title></title> 
 
</head> 
 

 
<body> 
 

 
    <input id="input"> 
 
    <button id="button" type="button" name="button">Search</button> 
 

 
    <script> 
 
    const der = document.getElementById('input'); 
 

 
    document.getElementById('button').addEventListener('click', 
 
     function() { 
 
     alert(der.value); 
 
     }); 
 
    </script> 
 

 
</body> 
 

 
</html>

8楼
0
0

當與DOM的工作,你想從輸入字段中獲得價值。按鈕只是您捕捉事件的方式。這就是我們使用事件監聽器的原因。一旦事件被觸發,程序知道根據你告訴它檢索的值來檢索值。

所以,你應該重寫你的情況是這樣的:

document.getElementById('button').addEventListener('click', 
    function() { 
     let der = document.getElementById('input').value; 
     //Now you can call some async code here to "play" with this value 
    }); 

注:我用let,因爲我看不到使用const如果該值將根據用戶的輸入更改的原因。

0
votes
answers
27 views
+10

爲什麼foo((&i)++)給出左值需要的錯誤。有沒有相關的

6

我瞭解左值的幾件事數組,但我不明白下面的代碼是如何給出一個錯誤:爲什麼foo((&i)++)給出左值需要的錯誤。有沒有相關的

#include<stdio.h> 

void foo(int *); 

int main() 
{ 
    int i=10; 
    foo((&i)++); 
} 

void foo(int *p) 
{ 
    printf("%d",*p); 
} 

6:13:錯誤:需要左值的遞增操作數 FOO(( & i)++); ^

+3

由於'&i'不是*左值*以及''++操作者需要一個。這大致相當於'&i = &i + 1;',最後一個表達式對你有意義嗎? –

+1

使用變量'i'是一個左值。如果你有像'int * p =&i;'這樣的指針,那麼'p'也是一個左值。但'&我'本身*不是*左值。也許你會對[這個值類別參考]感興趣(http://en.cppreference.com/w/c/language/value_category)?請注意,[非左值表達式列表](http://en.cppreference.com/w/c/language/value_category#Non-lvalue_object_expressions)包含「地址 - 運算符」。 –

+0

可能重複[左值需要作爲增量操作數](https://stackoverflow.com/questions/3364445/lvalue-required-as-increment-operand) – ssharma

沙发
0
2

x ++以下步驟的結果。

1) read the value of x in to register. 
2) increment the value of x 
3) write the incremented value back to x (which means you are changing the value of x by '1') 

但是你正在嘗試做的是(& I)++,這意味着以下。

1) read address of i into register 
2) increment the address by 1 
3) write the incremented value in to address again? How you can change the address? 

如果要將存儲在下一個地址中的整數發送到foo(),則需要按如下方式增加。

int *p = &i + 1; 
foo(p); 

但是,這可能會導致未定義的行爲,因爲你只知道我存儲的值的地址。一旦你增加地址,你會得到下一個地址,它可能包含一些垃圾值。

板凳
0
1

試圖將一元運算符&應用於臨時對象,該臨時對象的計算結果爲表達式(&i)++。您不得將操作員應用於臨時對象。

C標準(6.5.3.2地址和間接運算符):

1 The operand of the unary & operator shall be either a function designator, the result of a [] or unary * operator, or an lvalue that designates an object that is not a bit-field and is not declared with the register storage-class specifier.

+1

「*嘗試將一元運算符'&應用於臨時對象... *」確定? '&'適用於'i'。對我來說,看起來好像你混淆了'&'和'++'。 – alk

0
votes
answers
34 views
+10

Excel 2013:Powerpivot不同計數函數計數空單元格

0

嗨我使用powerpivot加載項爲我的Excel 2013,因爲我想在我的數據透視表中具有不同的計數函數。Excel 2013:Powerpivot不同計數函數計數空單元格

但是,當我從數據表製作數據透視表時,它也計算空白/空單元格。

E.g.如果我想有4個獨特的,我得到5(因爲也有空格)

這樣做是有道理 感謝 的Kristoffer

沙发
0
0

嘗試:

=CALCULATE(DISTINCTCOUNT(Table2[nums]), Table2[nums] <> BLANK()) 

圖像,以幫助:

enter image description here

enter image description here

+0

謝謝,但我會在pivottable上需要它嗎?我可以在那裏做計算嗎? – Aabo

+0

是的,你必須在你的功率數據透視表中做到這一點。選擇數據透視表。查找計算字段並創建一個新的計算字段。這裏輸入你的公式(上面的解決方案)。我測試過它,它工作。我會在解決方案中添加一些圖片以提供幫助。 – Carol

0
votes
answers
20 views
+10

當被稱爲右值析構函數/這是正確的

3

爲以下包裝類跟上std::unique_ptr中間對象來訪問me成員而不復制me的「OK」的方式?當被稱爲右值析構函數/這是正確的

下面是示例

#include <iostream> 
#include <memory> 

/* myobj from another library */ 
class myobj { 
public: 
    std::string me; /* actual member of interest is larger and more 
         complicated. Don't want to copy of me or myobj */ 

    /* more members in actual class */ 

    myobj(std::string i_am) { 
     /* more stuff happens in constructor */ 
     me = i_am; 
    } 

    ~myobj(){ 
     std::cout << me << ": Goodbye" << std::endl; 
    } 
}; 

/* A function in another library */ 
void who_is_this(std::string *who){ 
    std::cout << "This is " << *who << std::endl; 
} 

/* wrapper which I define */ 
class myobj_wrapper { 
    using obj_ptr = std::unique_ptr<myobj>; 
    obj_ptr ptr; 

public: 
    std::string *who; 

    myobj_wrapper(std::string i_am): 
     ptr(new myobj(i_am)), who(&ptr.get()->me) {} 

    myobj_wrapper(myobj &the_obj): who(&the_obj.me) { } 
}; 

int main() 
{ 
    { 
     myobj bob("Bob"); 
     who_is_this(myobj_wrapper(bob).who); 
    } 

    who_is_this(myobj_wrapper("Alice").who); 

    return 0; 
} 

所得程序收率

This is Bob 
Bob: Goodbye 
This is Alice 
Alice: Goodbye 

我定義myobj_wrapper多個對象以獲得who指針。在who_is_this函數中評估之前,我不確定感興趣的對象(上面的std::string)是否會被銷燬。 它似乎不是從上面,但我應該期待這一點?上述解決方案是否存在缺陷?

+0

代碼雖然我必須承認我不太明白這個練習的重點,但我不明白這個問題應該是一個解決方案在...上。 –

+0

** rvalue destructor **是什麼意思? –

+0

我的意思是'who_is_this(myobj_wrapper(「Alice」)。who);' –

沙发
0
1

我不知道,但這裏是我的觀點:

who_is_this(myobj_wrapper("Alice").who); 

這將創建一個包裝對象,將採取字符串文字作爲參數。然後,一個myobj實例將被動態創建,並移交給一個唯一的指針。通過這個實例,我們得到它的數據(字符串),並從包裝類指向它的傳統指針。所以,現在who指向me,即愛麗絲。

我們通過who(這是一個指針):

void who_is_this(std::string *who) 

這意味着該函數的參數who副本,而是指向原始數據。

所以現在整個問題是當包裝器對象超出範圍時(因此它的數據成員(唯一指針)也將超出範圍,這意味着已動態創建的myobj實例將被垃圾收集,這又意味着me將走出去的範圍太,等會who

包裝對象將走出去的範圍,後who_is_this()得到執行,這意味着你的代碼是OK。

+0

「的動態分配對象_包含對象將在** who_is_this()被執行後超出範圍**,這意味着您的代碼OK_「很酷,謝謝你的回答! –

+1

Thx。我想有人可能會添加關於陷阱的評論。我猜沒有任何。具體的例子是[這裏](https://github.com/boennecd/dynamichazard/blob/master/src/problem_data.h),我使用Armadillo庫。請參閱'map_res'類,例如'lp_map'方法。有時需要新的'arma :: vec',而在其他時候則不需要創建新的對象。 (忽視類之上的評論 - 這是錯誤的)。 –