[問題] 靜態區域變數設值問題

看板C_and_CPP (C/C++)作者 (兌現承諾)時間15年前 (2010/08/20 23:34), 編輯推噓1(1015)
留言16則, 3人參與, 最新討論串1/1
我想由筆記本資料為靜態區域變數設值 該怎麼做呢? 舉例程式如下: #include <iostream> #include <cstdlib> #include <vector> #include <fstream> #include <cstdio> #include <string> #include <sstream> #include <ctime> #include "Sphere.h" using namespace std; double Spherocylinder::LowerX = 0; 我想由筆記本資料將以下幾個靜態 double Spherocylinder::UpperX = 100; 區域變數設值.像底下main裡面的變數的 double Spherocylinder::LowerY = 0; 做法. double Spherocylinder::UpperY = 100; double Spherocylinder::k_rod = 0.01; double Spherocylinder::k_wall = 0.08; double Spherocylinder::ViscousConstant_t = 1.0; double Spherocylinder::ViscousConstant_r = 1.5; int main() { double rho, width, L, rate, truncation, division, total, TimeStep; double x0, x1, y0, y1, kr, kw, viscous_t, viscous_r; ifstream parameter ("C:\\Documents and Settings\\luckychild137\\My Documents\\Visual Studio 2010\\Projects\\ RodSphereMixture_08_20_2010\\Rod_08_20_2010\\ RodData.txt", ios::in); char comment[20]; parameter >> rho; parameter.getline(comment,20); parameter >> width; parameter.getline(comment,20); parameter >> L; parameter.getline(comment,20); 以下省略! -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.120.11.63

08/20 23:48, , 1F
這些初值要在compile-time就決定好, 你想做的事卻是
08/20 23:48, 1F

08/20 23:49, , 2F
run-time的事情; 如果你希望每次執行時都能透過改記事本
08/20 23:49, 2F

08/20 23:49, , 3F
的值設不同初值, 基本上應該不行, 最多就是程式執行後
08/20 23:49, 3F

08/20 23:49, , 4F
額外call一個function開檔讀資料來給初值, 不過這就不是
08/20 23:49, 4F

08/20 23:50, , 5F
compile-time給初值這種方法了. 如果你會每次都重build
08/20 23:50, 5F

08/20 23:50, , 6F
那應該透過一些文字處理trick或者先用某些script語言幫
08/20 23:50, 6F

08/20 23:51, , 7F
你自動產生.c/.cpp檔, 那應該是沒什麼問題....@_@"
08/20 23:51, 7F

08/20 23:54, , 8F
治標的方法有兩種: 1.直接把靜態變數存取權限設成
08/20 23:54, 8F

08/20 23:54, , 9F
謝謝你囉^^
08/20 23:54, 9F

08/20 23:55, , 10F
public 然後用 Class:: 直接去改值. 2.提供回傳值為
08/20 23:55, 10F

08/20 23:56, , 11F
value & 的函式或者 setter 去改他的值. 治本的方法就
08/20 23:56, 11F

08/20 23:57, , 12F
是直接改變你的類別設計, 如果只是為了省空間, 可以把
08/20 23:57, 12F

08/20 23:59, , 13F
這些需要共用的屬性另外包成一個object, 然後你的類
08/20 23:59, 13F

08/21 00:01, , 14F
maintain 參考到以上說的物件, 就可以動態去改值
08/21 00:01, 14F

08/21 00:10, , 15F
謝謝你們囉! 決定先治標.達到目的就好.
08/21 00:10, 15F

08/21 00:13, , 16F
更ox的方法是直接改成全域變數, 最多送它個namespace XD
08/21 00:13, 16F
文章代碼(AID): #1CRg2N3J (C_and_CPP)
文章代碼(AID): #1CRg2N3J (C_and_CPP)